5

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

 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”:“未找到索引”,“ok”:0}

我还尝试按名称删除索引

db.people.dropIndex( { "name" : "personname_1_email_1_sex_1_course_1" } )

我知道我可以使用以下命令一次性删除集合中的索引

db.people.dropIndexes()

请让我知道如何解决这个问题?

4

4 回答 4

14

将索引名称传入dropIndex而不将其放入对象中:

db.people.dropIndex("personname_1_email_1_sex_1_course_1")
于 2013-09-06T12:21:29.403 回答
6

Just to make full answer.

From documentation: http://docs.mongodb.org/manual/reference/method/db.collection.dropIndex/ you should use db.collection.dropIndex() with string or document that:

Specifies the index to drop. You can specify the index either by the index name or by the index specification document.

So both:

db.people.dropIndex("personname_1_email_1_sex_1_course_1")
db.people.dropIndex({personname:1,email:1,sex:1,course:1})

works fine.

于 2013-09-06T12:43:14.523 回答
1

我觉得你很亲近。将您的命令修改为以下命令应该可以

db.people.dropIndex("personname_1_email_1_sex_1_course_1")
于 2013-09-06T12:23:04.710 回答
0

删除 mongodb 索引

    Syntax :  db.collection.dropIndex(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

于 2018-08-18T07:45:49.263 回答