Vaše explain() výstupy naznačují, že:
-
Existuje 10 962 objektů, které mají
key.a : 456213154. Vašedb.collection.find({"key.a": 456213154})dotaz použil index nakey.aa vrátil 10962 objektů. -
Ve vaší sbírce je 0 objektů, které mají
key.a : 456213154a majíkey.b : { $exists : true }. Thedb.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})dotaz použil váš index na klíči.
Viz n hodnota pro každý dotaz - toto je vrácené číslo; a cursor value - toto je BtreeCursor pokud je použit index. V tomto případě by dávalo smysl, proč první dotaz trvá mnohem déle, protože má podstatně více objektů k vrácení.
Jste si jisti, že dokumenty s key.a : 456213154 hodnoty mají také key.b hodnoty?
Upravit:
Dotaz s $exists param je nesprávná syntaxe pro kontrolu existence ve vložených dokumentech.
Zkuste db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } }) .