MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Query Mongodb lenta con notazione a punti

Il tuo explain() le uscite suggeriscono che:

  1. Ci sono 10962 oggetti che hanno key.a : 456213154 . Il tuo db.collection.find({"key.a": 456213154}) query ha utilizzato l'indice su key.a e ha restituito 10962 oggetti.

  2. Ci sono 0 oggetti nella tua collezione che hanno key.a : 456213154 e avere key.b : { $exists : true } . Il db.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 } }) .