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.ai zwrócił 10962 obiektów. -
W Twojej kolekcji jest 0 obiektów, które mają
key.a : 456213154i 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 } }) .