如何在MongoDB中使用for循环

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},.......

这个查询有问题吗..?.


你确定这是Java吗?看起来不像。 - Nick
1个回答

20

为什么你要在没有查找条件的情况下更新所有记录?从技术上讲,这个循环是按照它应该做的方式工作的。相反,你需要遍历你集合中的一个游标,像这样:

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

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

可以尝试使用类似这样的方式。


谢谢您的回复。但是,“cursor中的行”是什么意思? - Mohammed shebin
@Mohammedshebin 每个游标都是一个对象,当在大多数语言中的foreach循环中像数组一样使用时,它将输出表示数据库中一行的行。这相当于在行上使用forEach。实际上,您可以在此处将for替换为forEach - Sammaye
好的。你能发给我确切的代码吗?还有,你说的row._id是什么意思? - Mohammed shebin
@Mohammedshebin 这是一个简单的循环,你不知道如何使用循环吗?row._id正在访问您提取的那个row_id。我已经更改了我的代码,使其从forEach函数中工作,它应该可以直接使用。 - Sammaye
@Mohammedshebin,对象上的点符号是访问您在此处使用的javascript语言中的方式,而for是一个非常基本的循环,只是表示对于游标中的每个row执行此操作。 - Sammaye
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接