Ihr explain()
Ausgaben legen nahe, dass:
-
Es gibt 10962 Objekte mit
key.a : 456213154
. Ihredb.collection.find({"key.a": 456213154})
Abfrage hat den Index aufkey.a
verwendet , und gab 10962 Objekte zurück. -
Es gibt 0 Objekte in Ihrer Sammlung, die
key.a : 456213154
haben und habenkey.b : { $exists : true }
. Diedb.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})
Die Abfrage hat Ihren Index für den Schlüssel verwendet.
Siehe n
Wert für jede Abfrage - dies ist die zurückgegebene Zahl; und der cursor
value - das ist BtreeCursor
wenn ein Index verwendet wird. In diesem Fall wäre es sinnvoll, warum die erste Abfrage viel länger dauert, weil sie wesentlich mehr Objekte zurückzugeben hat.
Sind Sie sicher, dass die Dokumente mit key.a : 456213154
Werte haben auch key.b
Werte?
Bearbeiten:
Die Abfrage mit dem $exists
param ist die falsche Syntax, um das Vorhandensein in eingebetteten Dokumenten zu prüfen.
Versuchen Sie db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } })
.