如何获得MongoDB的callbackcollection.find()

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

  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 } 

这是正确的callback语法,但是callback所提供的是一个Cursor ,而不是一组文档。 所以如果你想让你的callback以文档数组的forms提供结果,可以在游标上调用toArray来返回它们:

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

请注意,您的函数的callback仍然需要提供一个err参数,以便调用者知道查询是否工作。

2.x驱动程序更新

现在find返回的是光标而不是通过callback提供,所以典型的用法可以简化为:

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

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

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

基于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); }); }); }); }); 

希望这是有帮助的例子。