Seu
explain()
saídas sugerem que:-
Existem 10962 objetos que possuemkey.a : 456213154
. Seudb.collection.find({"key.a": 456213154})
consulta usou o índice emkey.a
, e retornou 10962 objetos.
-
Existem 0 objetos em sua coleção que possuemkey.a : 456213154
e temkey.b : { $exists : true }
. Odb.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})
query usou seu índice na chave.
Veja o
n
valor para cada consulta - este é o número retornado; e o cursor
valor - este é BtreeCursor
se um índice for usado. Nesse caso, faria sentido por que a primeira consulta demora muito mais, porque tem muito mais objetos para retornar. Tem certeza de que os documentos com
key.a : 456213154
valores também têm key.b
valores? Editar:
A consulta com o
$exists
param é a sintaxe errada para verificar a existência em documentos incorporados. Tente
db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } })
.