我试图创建一个稀疏的唯一索引,这是我的数据:
rs-ds119302:PRIMARY> db.trees.find({id_name:{$exists:true}, item_type:{$exists:true}}, {id_name: 1, item_type: 1})
{ "_id" : ObjectId("59417bf6748a2469ab093183"), "item_type" : 1, "id_name" : "AA" }
{ "_id" : ObjectId("59417bd7bc99346962fd289e"), "item_type" : 1, "id_name" : "BB" }
{ "_id" : ObjectId("59417bb4587803690be313bb"), "item_type" : 1, "id_name" : "CC" }
{ "_id" : ObjectId("599b6ff11e4d88264658e497"), "id_name" : "DD", "item_type" : 1 }
{ "_id" : ObjectId("599f3fa8442b9d46e2340389"), "id_name" : "EE", "item_type" : 1 }
索引创建命令:
db.trees.createIndex( { id_name: 1, item_type: -1 }, { sparse: true, unique: true } )
错误:
{
"ok" : 0,
"errmsg" : "E11000 duplicate key error index: ccp.trees.$id_name_1_item_type_-1 dup key: { : null, : 3 }",
"code" : 11000,
"codeName" : "DuplicateKey"
}
有什么想法吗? 谢谢
答案 0 :(得分:1)
仅包含升序/降序索引的稀疏复合索引 只要文档至少包含,键就会索引文档 其中一把钥匙。
因此,查找索引文档的过滤器不正确,因为sparsed索引将索引所有两个属性集中的文档。您需要运行以下查询,而不应显示重复的密钥。
db.trees.find({$or: [ { "id_name": { $exists: true } }, { "item_type": { $exists: true } } ] })