MongoDB:Collection.Find()是否支持promise

时间:2018-11-01 15:45:34

标签: node.js mongodb

我试图改造一个旧的Node.js Web服务,以用链接的Promise代替回调函数。 查询mongodb时,我们使用下面的语法遍历结果集。

collection.find(filter).toArray(function(err, items) {
          if (err) {
            throw(err);
          } else {
            console.log(items);

          }       

如果我尝试将.toArray()部分替换为.then(),则会收到以下错误“ col.find(...)。然后不是函数”。

如果我将.find()替换为.findOne().then(),则代码可以正常工作。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

find返回一个Cursor,但是游标的toArray方法返回一个promise。因此,您可以这样做:

collection.find(filter).toArray().then(...)

答案 1 :(得分:0)

我假设您正在使用mongoosejs。

collection.find()只是一个查询。要使其执行并返回承诺,您需要在其上调用.exec()。

collection.find(filter).exec()
    .then(items => console.log(items))
    .catch(err => { // handle error })

猫鼬文档为您提供了有关如何在回调或Promise中使用猫鼬的更多详细信息:https://mongoosejs.com/docs/api.html#model_Model.find