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.a
a vrátil 10962 objektů. -
Ve vaší sbírce je 0 objektů, které mají
key.a : 456213154
a 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 } })
.