如何在NodeJS mongodb驱动程序2.2版中使用promises

时间:2017-01-15 23:22:06

标签: javascript node.js mongodb promise

我正在阅读How to use MongoDB with promises in Node.js?,当我在第一个答案中看到他们说如果我没有通过回调,mongo司机会给我一个承诺。它适用于'连接',但是当我尝试时它不起作用:

db.collection('myCollection').find().then((docs)=>{console.log(docs)})

我得到了:

MongoDB error: TypeError: db.collection(...).find(...).then is not a function

我尝试在http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#find阅读find()的文档,我可以看到一些例子,其中包含以下内容:

collection.find({}).explain().then(function(docs) {
      test.ok(docs != null);

      db.close();
    });

这是一个发现的承诺,但它有explain()这个东西。它是什么?另外,为什么在这个API中没有提到promises?还有另一条线:

collection.insertMany([{a:1}, {a:2}, {a:3}], {w:1}).then(function(result) {

这也是一种承诺。

那么,如何使用promise和find()?

另外,为什么这个文档不会告诉任何东西的返回值?我可以使用的论点......

1 个答案:

答案 0 :(得分:3)

您正在寻找的是toArray(),它的工作方式与您想要的一样(内部回调,或者如果不回调则返回承诺)

db.collection('...').find().toArray()
.then(function(docs) {
  // =)
});

这是因为db.collection('..').find()返回游标,而不是承诺。

这种行为的目的是因为“整体查找”并不是唯一可以使用的模式(即允许使用流)。