我正在阅读How to use MongoDB with promises in Node.js?当我在第一个答案中看到他们说,如果我不传递回调,mongo 驱动程序将返回我一个 promise 。它适用于“连接”,但当我尝试时它不起作用:
db.collection('myCollection').find().then((docs)=>{console.log(docs)})
我得到了:
MongoDB error: TypeError: db.collection(...).find(...).then is not a function
我尝试阅读 find()
的文档 http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#find我可以在那里看到一些执行类似操作的示例:
collection.find({}).explain().then(function(docs) {
test.ok(docs != null);
db.close();
});
这是一个 find 的 Promise,但它有这个 explain()
东西。它是什么?另外,为什么这个 API 中没有提到 Promise?还有另一行:
collection.insertMany([{a:1}, {a:2}, {a:3}], {w:1}).then(function(result) {
这也是一个 promise 。
那么,如何在 find() 中使用 Promise 呢?
另外,为什么这个文档不会告诉任何东西的返回值?我不能使用的参数...
您正在寻找的是toArray()
,它的工作方式如您所愿(内部回调,或者如果没有回调则返回 promise )
db.collection('...').find().toArray()
.then(function(docs) {
// =)
});
这是因为 db.collection('..').find()
返回一个游标,而不是一个 promise 。
此行为是有意为之的,因为“整体查找”并不是唯一可以使用的模式(即允许流)。
我是一名优秀的程序员,十分优秀!