MongoClient v3.0を使用する場合、db.collectionは関数ではありません。質問する

MongoClient v3.0を使用する場合、db.collectionは関数ではありません。質問する

努力していますW3schools チュートリアルMongoDB を使用した nodeJS 上。

この例を nodeJS 環境で実装し、AJAX 呼び出しで関数を呼び出そうとすると、次のエラーが発生しました。

TypeError: db.collection is not a function
    at c:\Users\user\Desktop\Web Project\WebService.JS:79:14
    at args.push (c:\Users\user\node_modules\mongodb\lib\utils.js:431:72)
    at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:254:5
    at connectCallback (c:\Users\user\node_modules\mongodb\lib\mongo_client.js:933:5)
    at c:\Users\user\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)

以下に私が実装したコードを示します。

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

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  db.collection("customers").findOne({}, function(err, result) {
    if (err) throw err;
    console.log(result.name);
    db.close();
  });
});

実行がヒットするたびにエラーが発生することに注意してください。

db.collection("customers").findOne({}, function(err, result) {}

また、(重要かもしれないが)Node.js用の最新のMongoDBパッケージをインストールしたことにも注意してください(npm で MongoDB をインストールします)、MongoDB バージョンは MongoDB Enterprise 3.4.4、MongoDB Node.js ドライバー v3.0.0-rc0 です。

ベストアンサー1

MongoDB ネイティブ NodeJS ドライバーのバージョン 3.0 を使用している場合:

(これは、package.json に "mongodb": "^3.0.0-rc0" またはそれ以降のバージョンがあり、最新バージョンを使い続けたい人に適用されます。)

バージョン2.xではMongoDB ネイティブ NodeJS ドライバーデータベース オブジェクトを接続コールバックの引数として取得します。

MongoClient.connect('mongodb://localhost:27017/mytestingdb', (err, db) => {
  // Database returned
});

による変更履歴3.0 では、代わりにデータベース オブジェクトを含むクライアント オブジェクトが取得されます。

MongoClient.connect('mongodb://localhost:27017', (err, client) => {
  // Client returned
  var db = client.db('mytestingdb');
});

メソッドclose()もクライアントに移動されました。したがって、質問のコードは次のように変換できます。

MongoClient.connect('mongodb://localhost', function (err, client) {
  if (err) throw err;

  var db = client.db('mytestingdb');

  db.collection('customers').findOne({}, function (findErr, result) {
    if (findErr) throw findErr;
    console.log(result.name);
    client.close();
  });
}); 

おすすめ記事