Mongo稀疏索引无法创建

时间:2017-09-28 19:09:56

标签: mongodb indexing

我试图创建一个稀疏的唯一索引,这是我的数据:

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"
}

有什么想法吗? 谢谢

1 个答案:

答案 0 :(得分:1)

查看documentation

  

仅包含升序/降序索引的稀疏复合索引   只要文档至少包含,键就会索引文档   其中一把钥匙。

因此,查找索引文档的过滤器不正确,因为sparsed索引将索引所有两个属性集中的文档。您需要运行以下查询,而不应显示重复的密钥。

db.trees.find({$or: [ { "id_name": { $exists: true } }, { "item_type": { $exists: true } } ] })