如何获得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); }); }); }); });
希望这是有帮助的例子。