web-dev-qa-db-ja.com

db.createCollectionは関数ではありません

Mongoインスタンスを作成しようとしていますが、mongodb nodejsドライバーからヘルパーメソッドにアクセスできません。

私のmongoインスタンスはDocker内で実行されており、ポートはローカルに開かれています。

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)

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();
    });
});

実行中にエラーが返されることはなく、dbオブジェクトでメソッドが公開されることもありません。

何か案は?

14

Mongodb 3.0の changelog によると、代わりにデータベースオブジェクトを含むクライアントオブジェクトを取得するようになりました。

そのため、使用するデータベース(この場合はmydb)を指すdbオブジェクトが必要です。これを試して:

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

この問題に直面しているのはあなたではありません。 3.0 mongoドライバーにバグがあるか、下位互換性の変更を中断しているようです。こちらをご覧ください: db.collectionは、MongoClient v3.0を使用する場合の関数ではありません

URLでDB名を使用するには、MongoDBをアンインストールし、依存関係で"mongodb": "^2.2.33"に変更し、npm installを実行して新しいバージョンをインストールする必要があります。

または、コマンドnpm install [email protected] --saveを使用して特定のバージョンをインストールできます

3