我的收藏中有一个名为人的复合索引,如下所示
db.people.getIndexes()
[
{
"name" : "_id_",
"ns" : "at.people",
"key" : {
"_id" : 1
}
},
{
"_id" : ObjectId("521dd652a185d3defe301983"),
"ns" : "at.people",
"key" : {
"personname" : 1,
"email" : 1,
"sex" : 1,
"course" : 1
},
"name" : "personname_1_email_1_sex_1_course_1",
"unique" : false
}
]
我试图以这种方式删除此索引
db.people.dropIndex({"personname_1_email_1_sex_1_course_1": 1})
但我收到错误消息
{“errmsg”:“找不到索引”,“确定”:0}
我还尝试按名称删除索引
db.people.dropIndex( { "name" : "personname_1_email_1_sex_1_course_1" } )
我知道我可以使用以下命令一次性删除集合上的索引
db.people.dropIndexes()
请告诉我如何解决此问题?
答案 0 :(得分:14)
将索引名称传递给dropIndex
,而不将其放入对象中:
db.people.dropIndex("personname_1_email_1_sex_1_course_1")
答案 1 :(得分:6)
只是为了得到完整答案。
来自文档:http://docs.mongodb.org/manual/reference/method/db.collection.dropIndex/您应该db.collection.dropIndex()
使用string or document
:{/ p>
指定要删除的索引。您可以通过指定索引 索引名称或索引规范文档。
所以两者:
db.people.dropIndex("personname_1_email_1_sex_1_course_1")
db.people.dropIndex({personname:1,email:1,sex:1,course:1})
工作正常。
答案 2 :(得分:1)
我认为你很亲密。将命令修改为以下命令应该可以正常工作
db.people.dropIndex("personname_1_email_1_sex_1_course_1")
答案 3 :(得分:0)
删除mongodb索引
Syntax : db.collection.dropIndex(index)
在这里
index:类型:字符串或文档
指定要删除的索引。您可以通过以下方式指定索引 索引名称或由索引规范文档删除文本 index,将索引名称指定为字符串类型
在您的情况下:
db.people.dropIndex("personname_1_email_1_sex_1_course_1")
进入下面以获取更多详细信息: 考虑一个宠物收藏。在pets集合上调用getIndexes()方法将返回以下索引:
[
{ "v" : 1,
"key" : { "_id" : 1 },
"ns" : "test.pets",
"name" : "_id_"
},
{
"v" : 1,
"key" : { "cat" : -1 },
"ns" : "test.pets",
"name" : "catIdx"
},
{
"v" : 1,
"key" : { "cat" : 1, "dog" : -1 },
"ns" : "test.pets",
"name" : "cat_1_dog_-1"
}
]
字段cat上的单个字段索引具有用户指定的名称catIdx和索引规范文档{{“ cat”:-1}。
要删除索引catIdx,可以使用索引名称之一:
db.pets.dropIndex( "catIdx" )
或者您可以使用索引规范文档{“ cat”:-1}:
db.pets.dropIndex( { "cat" : -1 } )
参考:https://docs.mongodb.com/manual/reference/method/db.collection.dropIndex/#index-name