node.js - 如何在 MongoDB collection.find() 上获取回调

当我在 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
  }

最佳答案

这是正确的回调语法,但是 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) {...});

https://stackoverflow.com/questions/11661545/

相关文章:

node.js - 如何使用 Mongoose Promise - mongo

java - Mongo - 忽略属性被持久化

mongodb - 如何使用 mongodump 转储匹配特定日期范围的记录?

mongodb - 如何限制 mongodb 中更新文档的数量

arrays - 更新 mongodb 中的嵌套数组

mongodb - 如何将元素插入 MongoDB 内部列表?

mongodb - 如何在 Mongo 中进行 "NOT IN"查询?

node.js - 处理 Mongoose 验证错误——在哪里以及如何处理?

javascript - 通过 JavaScript 直接访问 MongoDB

mongodb - 使用新的 _id 在 MongoDB 中复制文档