从nodejs迭代mongodb中的每个文档

时间:2017-03-10 15:29:34

标签: node.js mongodb

我目前的代码:

  var cursor = db.get('unameMap').find()
  cursor.forEach(function(doc){  
      console.log("considering: " + doc)
  });

对数据库的所有其他请求都有效,因此假定var db已正确定义。

出于某种原因,这段代码在控制台中没有产生任何东西,在几个不同的集合上尝试过,它只是没有做任何事情。

.aggregate之类的所有其他mongo代码都可以正常运行

最终我想这样做(更新集合中每个文档的属性)

var cursor = db.get('unameMap').find()
  cursor.forEach(function(doc){  
      console.log("considering: " + doc)
      doc.testProperty="newValue"
      db.get('unameMap').save(doc);
  });

2 个答案:

答案 0 :(得分:1)

尝试使用此代码,但我认为db.get('unameMap')不会返回unameMap的Schema模型。参考Mongoose文档,它返回Mongoose选项,但是他们不再多说这个。我建议你包括Schema模型并使用它而不是db.get(...)。

以下是光标示例:

var MyModel = require('./unamemap');

var cursor = MyModel.find().cursor();

next(cursor.next);

function next(promise) {
  promise.then(function(doc) {
    if (doc) {
      console.log("considering: " + doc);
      doc.testProperty="newValue";
      doc.save(doc);
      next(cursor.next());
    }
  });
}

答案 1 :(得分:0)

这有效:

var doc = db.TestSteps.findOne({"testScenarioId":"100","testSteps.testStepNumber":"1"}, { 'testSteps.$': 1 });
var the_element = doc.testSteps[0];
var updated_element = changeThisElement(the_element);
db.TestSteps.update(
   {"testScenarioId":"100","testSteps.testStepNumber":"1"},
   {$set: { 'testSteps.$': updated_element }}
)