使用forEach将一个键更新到所有文档中的mongodb
问题的原因是:multi:true表示将更新所有与查询匹配的文档。而你的查询是{},它匹配所有的文档。所以,基本上你在每次迭代中都在更新所有文档的order字段。另外,必须在游标上启用snapshot模式,以确保同一文档不会被返回多次。
解决方法是:可以尝试使用bulk APIs来提高性能。具体代码如下:
var i = 1; db.images.find().snapshot().forEach(function(image) { db.images.update( {"_id" : image._id}, { "$set": {"order": NumberInt(i)} } ); i++; })
感谢4J41的回答,这个方法有效。直到现在,我也不太确定{"_id" : image._id}是如何起作用的。谢谢。
Styvane,你能解释一下你所提到的内容吗?