Tu explain()
los resultados sugieren que:
-
Hay 10962 objetos que tienen
key.a : 456213154
. Tudb.collection.find({"key.a": 456213154})
la consulta usó el índice enkey.a
y devolvió 10962 objetos. -
Hay 0 objetos en tu colección que tienen
key.a : 456213154
y tienekey.b : { $exists : true }
.db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})
la consulta usó su índice en la clave.
Ver el n
valor para cada consulta:este es el número devuelto; y el cursor
valor - esto es BtreeCursor
si se utiliza un índice. En este caso, tendría sentido por qué la primera consulta tarda mucho más, porque tiene muchos más objetos para devolver.
¿Estás seguro de que los documentos con key.a : 456213154
los valores también tienen key.b
valores?
Editar:
La consulta con $exists
param es la sintaxis incorrecta para verificar la existencia dentro de documentos incrustados.
Prueba db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } })
.