MongoDB E11000 ошибка дублированного ключа при попытке создатьIndex () с помощью оболочки - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь создать индекс в поле "детали" в моей коллекции.

В этой коллекции есть один документ:

{
   "_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Оболочка для создания индекса

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 разрешит только один документ, в котором отсутствует индексированное поле. Если существует более одного документа без значения для индексированного поля или отсутствует индексированное поле, сборка индекса завершится неудачно с ошибкой повторяющегося ключа.

Это невозможночто в моей коллекции есть документ с пустым полем «детали», потому что всегда есть хотя бы пустые массивы «другие имена», «заметки» и «интересы».

Также некоторые из ответов от stackoverflow говорят, что мы должны отбросить нашу БД и воссоздать ее, но я не хочу потерять свои данные.

Можно ли поместить индексы в существующие документы в моемколлекция?

Что я делаю не так?

...