Mongodb 一次构建多个索引

Mongodb 一次构建多个索引,mongodb,Mongodb,我需要在一个大型MongoDB集合中构建五个索引。我熟悉ensureIndex操作,但不知道用一个命令创建所有五个索引的方法。在MongoDB中可以创建批处理索引吗?我认为使用单个命令是不可能的,但是您可以创建自己的脚本来执行相同的操作。如果集合的大小很大,那么我建议您使用background true单独构建索引,以减少锁定问题的发生 db.collection.ensureIndex( { a: 1 }, { background: true } ) 至于现在,没有解决办法 后台将阻止数据

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

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

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

至于现在,没有解决办法

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


但如果你需要一个强大的一致性,不需要建立背景索引。。。您可能需要等待MongoDB本机解决方案的出现。

您错了,Mongo从2.6版(2014年之前发布)起就有了createIndexes命令


文档中说,它需要一个传递集合,因此速度应该大约快5倍。

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