我正在尝试在集合的“详细信息”字段中创建索引。
此集合中有一个文档:
{
"_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的回答,说我们必须删除数据库并重新创建它,但是我不想丢失我的数据。
是否可以为我的收藏集中的现有文档添加索引?
我在做什么错了?