MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Abfrage langsam mit Punktnotation

Ihr explain() Ausgaben legen nahe, dass:

  1. Es gibt 10962 Objekte mit key.a : 456213154 . Ihre db.collection.find({"key.a": 456213154}) Abfrage hat den Index auf key.a verwendet , und gab 10962 Objekte zurück.

  2. Es gibt 0 Objekte in Ihrer Sammlung, die key.a : 456213154 haben und haben key.b : { $exists : true } . Die db.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 } }) .