尝试通过Shell创建MongoDB E11000重复键错误

时间:2018-10-18 16:20:16

标签: database mongodb shell collections

我正在尝试在集合的“详细信息”字段中创建索引。

此集合中有一个文档:

{
   "_id": ObjectId("5bbf464c26d8111e268d7ced"),
   "name": "Felipe",
   "status": "employeed",
   "timestamp": 1539212400000,
   "day": "10/10/2018",
   "time": "23:00",
   "country": "Brazil",
   "meta": {
     "id": "mdanL0z",
     "url": "/users/mdanL0z",
     "year": "2019" 
  },
   "jobid": "MnrcpYb",
    "details": {
 "othernames": ["Filip", "Felip"],
 "notes": ["never lucky", "lazy"],
 "interests": ["IT", "soccer"]
   },
   "method": "tbc",
   "lastupdate": "10/11/2018, 11:58:28 AM" 
}

我正在从Mongo shell运行此命令以创建索引

db.employees.createIndex({ "details": 1}, {"name": "details_1", "unique": true})

失败并显示错误:

{
        "ok" : 0,
        "errmsg" : "E11000 duplicate key error collection: mydb1992.employees index: details dup key: { : {} }",
        "code" : 11000,
        "codeName" : "DuplicateKey"
}

我检查了很多建议和其他线程以及mongodb文档,它主要说:

https://docs.mongodb.com/manual/core/index-unique/

  

如果文档中唯一索引的字段没有值   索引,索引将为此文档存储一个空值。因为   唯一的约束,MongoDB将只允许一个文档   缺少索引字段。 如果有多个文档而没有   索引字段的值或缺少索引字段的索引   构建将因重复的密钥错误而失败。

在我的收集中,不可能有带有“详细信息”字段为空的文档,原因是总是至少有空数组“ othernames”,“ notes”和“ interests”。

还有来自stackoverflow的回答,说我们必须删除数据库并重新创建它,但是我不想丢失我的数据。

是否可以为我的收藏集中的现有文档添加索引?

我在做什么错了?

0 个答案:

没有答案