Din explain() output tyder på, at:
-
Der er 10962 objekter, der har
key.a : 456213154. Dindb.collection.find({"key.a": 456213154})forespørgslen brugte indekset påkey.a, og returnerede 10962 objekter. -
Der er 0 objekter i din samling, der har
key.a : 456213154og harkey.b : { $exists : true }.db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})forespørgslen brugte dit indeks på nøgle.
Se n værdi for hver forespørgsel - dette er det returnerede tal; og cursor værdi - dette er BtreeCursor hvis der bruges et indeks. I dette tilfælde ville det give mening, hvorfor den første forespørgsel tager meget længere tid, fordi den har betydeligt flere objekter at returnere.
Er du sikker på, at dokumenterne med key.a : 456213154 værdier har også key.b værdier?
Rediger:
Forespørgslen med $exists param er den forkerte syntaks til at kontrollere eksistensen i indlejrede dokumenter.
Prøv db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } }) .