使用promisified mongodb查找多个文档

时间:2017-02-11 16:20:41

标签: node.js mongodb promise

在node.js服务器上工作从我的mongoDB数据库中检索数据,但它有点笨拙并且想要使用promises主要是因为我以前从未使用过它们并且想要深入了解并且还要清理代码。我正在使用节点中的bluebird模块来宣传mongodb,并且当前可以查看一个项目。

var client = MongoClient.connectAsync('mongodb://localhost:27017/stockData')
.then(function(db) {
  return db.collection("stockData").findOneAsync({ High:  253.41796296683228 })
})
.then(function(doc) { 
console.log(doc)
})
.catch(function(err) {
   console.log(err)
}); 

然而,我希望能够使用游标循环遍历多个文档,但是我无法绕过整个事物,并希望将此块代码转换为使用promises。

MongoClient.connect(url, function(err,db){ //set up connection to mongodb takes two parameters a url for the db and a callback function 

        assert.equal(err,null) //check to see if there any errors connecting to the database
        var cursor = db.collection('stockData').find().limit(10) // cursor will be an array of objects retrieved from the database
        cursor.forEach(function(doc, err){ //loop through the cursor
            assert.equal(null,err) //check for errors
            console.log(doc)
        }, function(){ 
            db.close(); //close the database once the query is finished
        });
    });

特别是如果你能解释发生了什么事情,我将非常感谢你们的帮助。

1 个答案:

答案 0 :(得分:0)

我就是这样做的:

var Promise = require('bluebird');
var MongoClient = Promise.promisifyAll(require('mongodb'));

MongoClient.connectAsync('mongodb://localhost:27017/test')
  .then(function (db){
    return db.collection('stockData').find({}, { limit: 10 }).toArrayAsync()
      .then(function (docs) {
        if (docs.length > 0) {
          docs.forEach(function(doc) {
            console.log(doc);
          });
        }
      })
      .catch(function (err) {
        console.log(err);
      })
      .finally(function() {
        db.close();
      })
  .catch(function (err) {
    console.log(err);
  });
});