Я пытаюсь создать индекс в поле "детали" в моей коллекции.
В этой коллекции есть один документ:
{
"_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 говорят, что мы должны отбросить нашу БД и воссоздать ее, но я не хочу потерять свои данные.
Можно ли поместить индексы в существующие документы в моемколлекция?
Что я делаю не так?