Mongodb 一次构建多个索引
我需要在一个大型MongoDB集合中构建五个索引。我熟悉ensureIndex操作,但不知道用一个命令创建所有五个索引的方法。在MongoDB中可以创建批处理索引吗?我认为使用单个命令是不可能的,但是您可以创建自己的脚本来执行相同的操作。如果集合的大小很大,那么我建议您使用background true单独构建索引,以减少锁定问题的发生Mongodb 一次构建多个索引,mongodb,Mongodb,我需要在一个大型MongoDB集合中构建五个索引。我熟悉ensureIndex操作,但不知道用一个命令创建所有五个索引的方法。在MongoDB中可以创建批处理索引吗?我认为使用单个命令是不可能的,但是您可以创建自己的脚本来执行相同的操作。如果集合的大小很大,那么我建议您使用background true单独构建索引,以减少锁定问题的发生 db.collection.ensureIndex( { a: 1 }, { 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"
}
]
>