如何在MongoDB上收集回调.find()

时间:2012-07-26 02:40:27

标签: node.js mongodb express

当我在MongoDB / Node / Express中运行collection.find()时,我想在完成后收到回调。这个的正确语法是什么?

 function (id,callback) {

    var o_id = new BSON.ObjectID(id);

    db.open(function(err,db){
      db.collection('users',function(err,collection){
        collection.find({'_id':o_id},function(err,results){  //What's the correct callback synatax here?
          db.close();
          callback(results);
        }) //find
      }) //collection
    }); //open
  }

2 个答案:

答案 0 :(得分:40)

这是正确的回调语法,但find为回调提供的是Cursor,而不是文档数组。因此,如果您希望回调以文档数组的形式提供结果,请在光标上调用toArray以返回它们:

collection.find({'_id':o_id}, function(err, cursor){
    cursor.toArray(callback);
    db.close();
});

请注意,函数的回调仍然需要提供err参数,以便调用者知道查询是否有效。

2.x驱动程序更新

find现在返回光标而不是通过回调提供它,因此典型用法可以简化为:

collection.find({'_id': o_id}).toArray(function(err, results) {...});

或者在预期单个文档的情况下,使用findOne更简单:

collection.findOne({'_id': o_id}, function(err, result) {...});

答案 1 :(得分:21)

根据JohnnyHK的回答,我只是将我的调用包装在db.open()方法中并且它有效。谢谢@JohnnyHK。

app.get('/answers', function (req, res){
     db.open(function(err,db){ // <------everything wrapped inside this function
         db.collection('answer', function(err, collection) {
             collection.find().toArray(function(err, items) {
                 console.log(items);
                 res.send(items);
             });
         });
     });
});

希望它有用作为一个例子。