2014-11-05 61 views
0

所有集合有我跑ensureIndex命令多次ensureIndex在数据库

db.collection1.ensureIndex({ <key>: 1}) 
db.collection2.ensureIndex({ <key>: 1}) 
db.collection3.ensureIndex({ <key>: 1}) 

还是有一种方式来运行ensureIndex在数据库中的所有收藏品?

db.collectionX.ensureIndex({ <key>: 1}) 
+0

您的所有集合都将具有相同密钥的索引? – 2014-11-05 14:13:23

+0

另外,请记住索引在RAM和磁盘方面相当昂贵,它们会影响插入性能和更新性能,并且对索引某些字段(例如全文本,大型字节数组等)没有意义。 )。使用大量的索引通常是一个非常糟糕的迹象。如果您需要复制集合(例如白天记录数据或其他东西,这是我能想到的唯一用例),负责确定集合的代码应该能够在该新创建的集合上执行确保索引。 – mnemosyn 2014-11-05 15:55:15

回答

2

简短的回答:第

龙答:没有,你还是不能这样做。

当设计一个数据库通常有两个阶段:

  1. 创建的所有集合,然后运行每个集合ensureIndex命令。这只会执行一次,除非您迁移数据库,在这种情况下,您可能需要再次运行您的ensureIndex命令。

  2. 第二阶段是编辑集合结构(改进数据库,删除字段,添加字段)。编辑完一些字段后,他们可能还需要一些索引或需要编辑一些现有的索引。在这种情况下,您通常会删除并创建其他索引。此命令仍然只运行一次。

总之不会有太多的案件中,开发者或管理员将需要在多个集合运行ensureIndex这么多次,他们将需要一个命令来更改所有索引。即使会出现这种情况,那些收集需要相同索引的机会有多大?