Node.js 在nodejs中迭代从mongodb返回的结果

Node.js 在nodejs中迭代从mongodb返回的结果,node.js,mongodb,mongodb-query,Node.js,Mongodb,Mongodb Query,我无法遍历从mongodb返回的结果 下面是连接到mongodb并获得结果的代码 MongoClient.connect(url, function (err, db) { var collection = db.collection('users'); collection.remove({}, { w: 1 }, function (err, result) { cons

我无法遍历从mongodb返回的结果

下面是连接到mongodb并获得结果的代码

MongoClient.connect(url, function (err, db) {       

        var collection = db.collection('users');            

            collection.remove({}, { w: 1 }, function (err, result) {
                    console.log(result.ok);
                    res.json    ({ success: true, obj:result.ok});                    
            })
});
结果是

obj: {ok: 1,n: 0}
当我尝试使用result.n访问n的值时,我变得未定义

有人能告诉我如何访问nodejs中返回结果的值吗


谢谢

根据mongodb的文档-

.remove
应该返回一个
WriteResult
对象,该对象看起来像
WriteResult({“nRemoved”:1})
。如果出现错误,则应返回:

WriteResult({
   "nRemoved" : 21,
   "writeConcernError" : {
      "code" : 64,
      "errInfo" : {
         "wtimeout" : true
      },
      "errmsg" : "waiting for replication timed out"
   }
})

不,不是。结果:

res.json({ "success": true, "obj": result })

而不是你所说的对象是如何序列化为JSON的,以及你是如何访问它的

但是,返回的“true”对象本身有它自己的
结果
键,因此如果要访问
n
属性,甚至
ok
属性,则必须执行以下操作:

console.log(result.result.n);
下面是一个简单的清单,证明了这一点:

var async = require('async'),
    mongodb = require('mongodb'),
    MongoClient = mongodb.MongoClient;

MongoClient.connect("mongodb://localhost/test",function(err,db) {

  var collection = db.collection('testme');

  async.series(
    [
      function(callback) {
        collection.remove({},callback);
      },
      function(callback) {
        collection.insert(
          [
            { "data": 1 },
            { "data": 2 }
          ],
          callback
        );
      },
      function(callback) {
        collection.remove({},function(err,result) {
          console.log(JSON.stringify(result));
          console.log(JSON.stringify(result.result.n));
          callback(err);
        });
      }
    ],
    function(err) {
      db.close();
    }
  );

});
预期结果如下:

{"ok":1,"n":2}
2
这是因为“实际”返回的是来自节点本机驱动程序API的对象,而不是普通对象。访问器方法是您真正需要的

该方法在API中也被认为是不推荐使用的,首选使用它。事实上,它们都做相同的事情,但弃用通知意味着您的代码应该使用该方法以实现将来的兼容性:

var async = require('async'),
    mongodb = require('mongodb'),
    MongoClient = mongodb.MongoClient;

MongoClient.connect("mongodb://localhost/test",function(err,db) {

  var collection = db.collection('testme');

  async.series(
    [
      function(callback) {
        collection.deleteMany({},callback);
      },
      function(callback) {
        collection.insert(
          [
            { "data": 1 },
            { "data": 2 }
          ],
          callback
        );
      },
      function(callback) {
        collection.deleteMany({},function(err,result) {
          console.log(JSON.stringify(result));
          console.log(JSON.stringify(result.result.n));
          callback(err);
        });
      }
    ],
    function(err) {
      db.close();
    }
  );

});
var async = require('async'),
    mongodb = require('mongodb'),
    MongoClient = mongodb.MongoClient;

MongoClient.connect("mongodb://localhost/test",function(err,db) {

  var collection = db.collection('testme');

  async.series(
    [
      function(callback) {
        collection.deleteMany({},callback);
      },
      function(callback) {
        collection.insert(
          [
            { "data": 1 },
            { "data": 2 }
          ],
          callback
        );
      },
      function(callback) {
        collection.deleteMany({},function(err,result) {
          console.log(JSON.stringify(result));
          console.log(JSON.stringify(result.result.n));
          callback(err);
        });
      }
    ],
    function(err) {
      db.close();
    }
  );

});