2015-02-23 35 views
6

我需要在一个大的MongoDB集合中构建五个索引。我熟悉ensureIndex操作,但我不知道用单个命令创建全部五个索引的方法。 MongoDB中可以创建批量索引吗?一次构建多个索引

回答

-1

我认为这是不可能的使用单一的命令,但你可以创建自己的脚本,这些脚本都会执行相同的操作。如果你的集合规模很大,那么我建议你用背景分别建立索引,以减少任何锁定问题的机会。

db.collection.ensureIndex({ a: 1 }, { background: true }) 
0

至于现在还没有解决方案。

后台将阻止数据库锁定并允许执行其他操作。但要运行这些操作,您必须打开新的mongo shell,或者使用您选择的语言(如js)异步运行它们。

但是,如果您需要强大的一致性并且不需要后台索引构建......您可能需要等待MongoDB本机解决方案来。

3

这在shell中非常简单,有一个createIndexes集合的扩展,您只需传入想要创建索引的键。

db.test.createIndexes([ 
     { "a" : 1 }, 
     { "b" : 1 }, 
     { "c" : 1 }, 
     { "d" : 1 }, 
     { "e" : 1 } 
    ]); 

这将然后给我们以下

> db.test.getIndexes() 
[ 
     { 
       "v" : 2, 
       "key" : { 
         "_id" : 1 
       }, 
       "name" : "_id_", 
       "ns" : "test.test" 
     }, 
     { 
       "v" : 2, 
       "key" : { 
         "a" : 1 
       }, 
       "name" : "a_1", 
       "ns" : "test.test" 
     }, 
     { 
       "v" : 2, 
       "key" : { 
         "b" : 1 
       }, 
       "name" : "b_1", 
       "ns" : "test.test" 
     }, 
     { 
       "v" : 2, 
       "key" : { 
         "c" : 1 
       }, 
       "name" : "c_1", 
       "ns" : "test.test" 
     }, 
     { 
       "v" : 2, 
       "key" : { 
         "d" : 1 
       }, 
       "name" : "d_1", 
       "ns" : "test.test" 
     }, 
     { 
       "v" : 2, 
       "key" : { 
         "e" : 1 
       }, 
       "name" : "e_1", 
       "ns" : "test.test" 
     } 
] 
>