Node.js 如何获取MongoDB collection.find()上的回调
在MongoDB/Node/Express中运行Node.js 如何获取MongoDB collection.find()上的回调,node.js,mongodb,express,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
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
}
这是正确的回调语法,但是
find
为回调提供的是一个数组,而不是一个文档数组。因此,如果希望回调以文档数组的形式提供结果,请调用光标以返回结果:
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) {...});
或者在这种情况下,如果只需要一个文档,则使用起来更简单:
基于JohnnyHK answer,我简单地将我的调用包装在db.open()方法中,它成功了。谢谢@johnyhk
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);
});
});
});
});
app.get('/answers',函数(req,res){
open(function(err,db){//所以在这种情况下,我只返回一个结果,引用数据[0]是正常的
在控制器中?在这种情况下,您应该使用findOne
来代替它,它直接将文档提供给回调。请参阅,他们称之为…回调地狱!它开始了…我使用相同的方法,但我得到了db.open不是函数错误,您能帮助我吗
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);
});
});
});
});