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 : 456213154e 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 } }) .