sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta mongodb lenta con notación de puntos

Tu explain() los resultados sugieren que:

  1. Hay 10962 objetos que tienen key.a : 456213154 . Tu db.collection.find({"key.a": 456213154}) la consulta usó el índice en key.a y devolvió 10962 objetos.

  2. Hay 0 objetos en tu colección que tienen key.a : 456213154 y tiene key.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 } }) .