MongoDB更新多个集合

4
我的MongoDB包含以下集合名称:
10.9.40.46
10.9.40.47
10.9.40.48
10.9.40.49
10.9.40.50
10.9.40.51
10.9.40.52

在所有的包含N个文档的集合中,每个文档都有一个默认的共同键名为“status”,其值为1。当我更新我的集合以将“status”从1更改为0时,我使用以下查询:

 db.getCollection("10.9.40.46").update({"status":1},{$set:{"status":0}},false,true)

以上查询工作得很好,但是,我想更新所有的集合,然后手动将我的集合名称传递给查询。那么在MongoDB中有没有这样的概念,我可以使用单个查询或类似的东西来使用数据库并更新该数据库中的所有集合文档?我还使用循环读取所有集合并更新文档,但由于集合数量太大,它需要很长时间。

2个回答

12

不,没有API可以一次执行同一个操作来操作多个集合。这是因为通常情况下你不会像使用它们一样使用集合。集合用于将相同类型的文档分组,而不是根据内容和/或键进行分组。

组织你拥有的文档的正常方式是将它们全部放在一个集合中,为每个文档添加一个IP地址字段,并在ip字段上创建一个索引以加快查找速度。


我会说集合通常用于将同一类型的文档分组,但并非总是如此。有些情况下,将不同类型的内容放在同一个集合中是值得的。#小细节 - Ian Mercer
如果我把所有的集合文档放在一个集合中,那么我的单个集合大小会增加,而我的代码会像每5分钟一样工作。我把新数据放在集合中,那么单个集合如何处理这种情况,可能会出现写入锁等问题? - Neo-coder
1
@yogesh 集合大小不应该是一个问题。MongoDB 被设计成可以扩展到巨大的集合大小。写锁是按数据库而非按集合进行的。因此,使用更多的集合并不会减少由于写锁而导致操作延迟的可能性。有关 MongoDB 中数据库锁定的更多信息,请参见 http://docs.mongodb.org/manual/faq/concurrency/。 - Philipp

1
您可以使用for循环来做相同的事情。
var collection='10.9.40.'
var count=46;
var n=46;
var url='';
for(i =0;i<7;i++){
url="";
n=46+i;
url=count+n;
db.getCollection(url).update({"status":1},{$set:
{"status":0}},false,true)
}

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