我正在阅读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()?
另外,为什么这个文档不会告诉任何东西的返回值?我可以使用的论点......
答案 0 :(得分:3)
您正在寻找的是toArray()
,它的工作方式与您想要的一样(内部回调,或者如果不回调则返回承诺)
db.collection('...').find().toArray()
.then(function(docs) {
// =)
});
这是因为db.collection('..').find()
返回游标,而不是承诺。
这种行为的目的是因为“整体查找”并不是唯一可以使用的模式(即允许使用流)。