【问题标题】:mongodb update a key to all documents using forEachmongodb 使用 forEach 更新所有文档的键
【发布时间】:2017-03-14 10:11:11
【问题描述】:

我想在Mongo 中更新我所有文档的“订单”字段,使其变为 1..2..3..4....34。

运行后,它们都有“order”:“34”。 我做错了什么?

var i = 1;
db.images.find().forEach(function() {
    db.images.update(
        {},
        { "$set": {"order": NumberInt(i)} },
        { multi: true }
    );
    i++;
})

【问题讨论】:

标签: mongodb loops foreach


【解决方案1】:

multi : true 表示将更新与查询匹配的所有文档。您的查询是{},它匹配所有文档。所以,基本上你是在每次迭代中更新所有文档的order

此外,必须在光标上启用snapshot 模式,以确保不会多次返回同一文档。

你可以试试这个:

var i = 1;
db.images.find().snapshot().forEach(function(image) {
    db.images.update(
        {"_id" : image._id},
        { "$set": {"order": NumberInt(i)} }
    );
    i++;
})

从性能的角度来看,最好使用批量 API。 bulkwrite

【讨论】:

  • 感谢 4J41,这行得通。我想直到现在我还不太确定 {"_id" : image._id} 会有什么帮助。干杯。
  • Styvane 你能解释一下你指的是什么吗?
猜你喜欢
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2020-07-11
  • 2019-10-13
  • 2015-05-13
  • 2021-03-08
相关资源
最近更新 更多