使用Javascript更新所有MongoDB文档中的字段

时间:2016-09-26 13:25:18

标签: javascript mongodb

我正在尝试更新MongoDB集合中每个Document的字段。

我添加了Mongo shell中的字段,但我想将每个字段的值更改为随机数。

User.find({}, function(err, items){
  if (err){
    consele.log('err');
    consele.log(err);
  }
  items.forEach(function(item){
    var time = (Math.floor(Math.random() * (1474893715201 - 1474800000000) + 1474800000000));
    item.update({}, {$set:{"lastLogin": time}}, false, true);
  });
});

如果我在.forEach循环中的console.log(item),我会按照我的期望得到集合中的每个文档,所以到那里的所有内容似乎都有效。

谁能看到我出错的地方?

谢谢大家!

2 个答案:

答案 0 :(得分:0)

Api调用是异步的,您必须将它包装在promise或async库中以完成构建更改。

或者您也可以通过一次通话中的mongo进行批量查找和更新:https://docs.mongodb.com/manual/reference/method/Bulk.find.update/

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { status: "D" } ).update( { $set: { status: "I", points: "0" } } );
bulk.find( { item: null } ).update( { $set: { item: "TBD" } } );
bulk.execute();

答案 1 :(得分:0)

为什么不喜欢

User.find({}, function(err, items){
  if (err){
    consele.log('err');
    consele.log(err);
  }
  items.forEach(function(item){
    var time = (Math.floor(Math.random() * (1474893715201 - 1474800000000) + 1474800000000));
    item.lastLogin = time;
    User.save(item); // or item.save() based on driver you are using 
  });
});