Вашият explain()
резултатите предполагат, че:
-
Има 10962 обекта, които имат
key.a : 456213154
. Вашатаdb.collection.find({"key.a": 456213154})
заявката използва индекса наkey.a
и върна 10962 обекта. -
Във вашата колекция има 0 обекта, които имат
key.a : 456213154
и иматkey.b : { $exists : true }
.db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})
заявката използва вашия индекс на ключ.
Вижте n
стойност за всяка заявка - това е върнатото число; и cursor
стойност - това е BtreeCursor
ако се използва индекс. В този случай би имало смисъл защо първата заявка отнема много повече време, защото има значително повече обекти за връщане.
Сигурни ли сте, че документите с key.a : 456213154
стойностите също имат key.b
стойности?
Редактиране:
Заявката с $exists
param е грешен синтаксис за проверка на съществуването във вградени документи.
Опитайте db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } })
.