MongoDB:无法删除集合上的复合索引

时间:2013-09-06 12:04:48

标签: mongodb

我的收藏中有一个名为的复合索引,如下所示

 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()

请告诉我如何解决此问题?

4 个答案:

答案 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