一次构建多个索引

时间:2015-02-23 03:38:08

标签: mongodb

我需要在大型MongoDB集合中构建五个索引。我熟悉ensureIndex操作,但我不知道用单个命令创建所有五个索引的方法。是否可以在MongoDB中创建批处理索引?

4 个答案:

答案 0 :(得分:8)

这在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"
        }
]
>

答案 1 :(得分:2)

你错了,Mongo自2.6(2014年之前发布)以来有 createIndexes 命令

https://docs.mongodb.com/v3.0/reference/command/createIndexes/

文档说,它需要一次通过收集,所以它应该快大约5倍。

答案 2 :(得分:0)

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

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

但如果您需要强大的一致性并且不需要构建背景索引......您可能需要等待MongoDB原生解决方案的到来。

答案 3 :(得分:-1)

我认为使用单个命令是不可能的,但您可以创建自己的脚本来执行相同的操作。如果您的集合大小很大,那么我建议您使用background true分别构建索引,以减少出现任何锁定问题的可能性。

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