【问题标题】:How to use promises in NodeJS mongodb driver version 2.2如何在 NodeJS mongodb 驱动 2.2 版中使用 Promise
【发布时间】:2017-05-17 21:20:28
【问题描述】:

我正在阅读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();
    });

这是对 find 的承诺,但它有 explain() 的东西。它是什么?另外,为什么在这个 API 中没有提到承诺?还有另一行:

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

这也是一个承诺。

那么,如何在 find() 中使用 Promise?

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

【问题讨论】:

  • 检查这个tutorial
  • 该教程适用于不同库的 mongoose。

标签: javascript node.js mongodb promise


【解决方案1】:

你正在寻找的是toArray(),它可以像你想要的那样工作(内部回调,或者如果没有回调则返回承诺)

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

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

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

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 2018-10-02
    • 2018-06-19
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2016-05-15
    相关资源
    最近更新 更多