Il tuo explain()
le uscite suggeriscono che:
-
Ci sono 10962 oggetti che hanno
key.a : 456213154
. Il tuodb.collection.find({"key.a": 456213154})
query ha utilizzato l'indice sukey.a
e ha restituito 10962 oggetti. -
Ci sono 0 oggetti nella tua collezione che hanno
key.a : 456213154
e averekey.b : { $exists : true }
. Ildb.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})
query ha utilizzato il tuo indice sulla chiave.
Vedi il n
valore per ogni query - questo è il numero restituito; e il cursor
valore - questo è BtreeCursor
se viene utilizzato un indice. In questo caso avrebbe senso perché la prima query richiede molto più tempo, perché ha molti più oggetti da restituire.
Sei sicuro che i documenti con key.a : 456213154
i valori hanno anche key.b
valori?
Modifica:
La query con $exists
param è la sintassi sbagliata per verificare l'esistenza all'interno di documenti incorporati.
Prova db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } })
.