Twój explain()
dane wyjściowe sugerują, że:
-
Istnieje 10962 obiektów, które mają
key.a : 456213154
. Twójdb.collection.find({"key.a": 456213154})
zapytanie użyło indeksu nakey.a
i zwrócił 10962 obiektów. -
W Twojej kolekcji jest 0 obiektów, które mają
key.a : 456213154
i miećkey.b : { $exists : true }
.db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})
zapytanie użyło twojego indeksu na kluczu.
Zobacz n
wartość dla każdego zapytania - jest to zwracana liczba; i cursor
wartość - to jest BtreeCursor
jeśli używany jest indeks. W tym przypadku miałoby sens, dlaczego pierwsze zapytanie trwa znacznie dłużej, ponieważ ma znacznie więcej obiektów do zwrócenia.
Czy na pewno dokumenty z key.a : 456213154
? wartości mają również key.b
wartości?
Edycja:
Zapytanie z $exists
param to niewłaściwa składnia do sprawdzania istnienia w osadzonych dokumentach.
Wypróbuj db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } })
.