web-dev-qa-db-fra.com

db.createCollection n'est pas une fonction

J'essaie de créer une instance de mongo mais je ne peux accéder à aucune des méthodes d'assistance à partir du pilote mongodb nodejs.

Mon instance mongo fonctionne dans Docker et les ports ont été ouverts à mon local.

TypeError: db.createCollection is not a function
at /var/www/html/beacon/index.js:6:8
at args.Push (/var/www/html/beacon/node_modules/mongodb/lib/utils.js:431:72)
at /var/www/html/beacon/node_modules/mongodb/lib/mongo_client.js:254:5
at connectCallback (/var/www/html/beacon/node_modules/mongodb/lib/mongo_client.js:933:5)
at /var/www/html/beacon/node_modules/mongodb/lib/mongo_client.js:794:11
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)

Copié de w3schools ...

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    db.createCollection("customers", function(err, res) {
        if (err) throw err;
        console.log("Collection created!");
        db.close();
    });
});

Aucune erreur n'est renvoyée lors de l'exécution et aucune méthode n'est exposée sur l'objet db.

des idées?

14
James Bass Davies

Selon le changelog pour Mongodb 3.0, vous obtenez maintenant un objet client contenant l'objet de base de données à la place:

Vous avez donc besoin de l'objet db qui pointe vers la base de données que vous souhaitez utiliser, dans votre cas mydb. Essaye ça:

var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {   //here db is the client obj
    if (err) throw err;
    var dbase = db.db("mydb"); //here
    dbase.createCollection("customers", function(err, res) {
        if (err) throw err;
        console.log("Collection created!");
        db.close();   //close method has also been moved to client obj
    });
});
26
wrangler

Vous n'êtes pas celui confronté à ce problème. Semble que le pilote 3.0 mongo a un bogue ou ceux-ci ne font que casser les modifications de compatibilité descendante. Jetez un oeil ici: db.collection n'est pas une fonction lors de l'utilisation de MongoClient v3.

Pour utiliser le nom de la base de données dans l'URL, vous devez désinstaller MongoDB, passez à "mongodb": "^2.2.33" dans les dépendances et faites npm install pour installer la nouvelle version.

Ou vous pouvez installer une version spécifique avec la commande npm install [email protected] --save

3
Daniil Tyshchenko