10

我需要向 mongodb 集合插入一个新字段(列),该集合现在有 5246 个文档。该字段应自动递增。所以我使用了一个 for 循环。我的查询如下`

for(i=1;i<=5246;i++) {
    db.coll.update({},{$set:{"new_field":i}},false,true)
}; 

但我的坏输出是,

{new_field:5246},{new_field:5246},{new_field:5246},.......

查询有没有问题...?

4

1 回答 1

20

为什么要更新所有没有查找条件的记录?从技术上讲,这个循环正在正常工作。相反,您需要做的是循环遍历您的集合的游标,如下所示:

var cursor = db.coll.find(),
    i = 0;

cursor.forEach(function(x){
    db.coll.update({_id: x._id}, {$set:{new_field:i}})
    $i++;
});

类似的东西会起作用。

于 2012-10-18T09:02:47.830 回答