2017-09-28 6 views
0

Je suis en train de créer un index rares uniques, voici mes données:indice clairsemés Mongo ne peut pas créer

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 } 

Index commande create:

db.trees.createIndex({ id_name: 1, item_type: -1 }, { sparse: true, unique: true }) 

Erreur:

{ 
    "ok" : 0, 
    "errmsg" : "E11000 duplicate key error index: ccp.trees.$id_name_1_item_type_-1 dup key: { : null, : 3 }", 
    "code" : 11000, 
    "codeName" : "DuplicateKey" 
} 

Des pensées à ce sujet? Merci

Répondre

1

Vérifiez la documentation:

Sparse compound indexes that only contain ascending/descending index keys will index a document as long as the document contains at least one of the keys.

Ainsi, votre filtre pour trouver les documents indexés n'est pas correct puisque l'indice sparsed indexe tous les documents qui ont au moins un des deux propriétés de l'ensemble . Vous devrez exécuter la requête suivante à la place, ce qui devrait révéler les clés en double.

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