Wenn ich Daten in meiner users
Sammlung habe, die wie folgt aussieht:
Und ich möchte herausfinden, welcher Benutzer die Foto-ID 127 besitzt, dann verwende ich die Abfrage:
%Vor% Ich habe es versucht, aber es scheint nicht möglich zu sein, dass MongoDB einen Index für diese Abfrage verwendet. Der Index, den ich versuchte, war: db.users.ensureIndex({photos:1});
. Und als ich explain()
mongo benutzt habe, sagte ich, dass es einen BasicCursor verwendet (d. H. Kein Index wurde verwendet).
Ist es möglich, einen Index zu erstellen, den mongo für diese Abfrage verwendet?
Nein, es gibt keine Möglichkeit, mongodb mitzuteilen, den Index für eine existierende Abfrage zu verwenden. Die Indizierung ist vollständig mit Daten verknüpft . Da $ exists nur zu den Schlüsseln (Feldern) gehört, kann es nicht in Indizes verwendet werden.
$ exists prüft nur, ob der angegebene Schlüssel (oder das angegebene Feld) im Dokument vorhanden ist.
$ exist verwendet keinen Index, aber Sie können Ihre Datenstruktur in
ändern %Vor%und dann
verwenden %Vor%zum Erstellen eines Index für die Foto-ID.
Es scheint, dass ich falsch liege. Sie können Ihre $ exists-Abfrage zwingen, Ihren Index zu verwenden. Lassen Sie uns die obige Struktur weiter verwenden, aber Ihre Foto-ID ist nicht sicher enthalten, das heißt Einige Dokumente haben den Schlüssel "id" und manche nicht. Dann können Sie einen spärlichen Index dafür erstellen:
%Vor%dann Abfrage wie folgt:
%Vor%Sie können explain hinzufügen, um zu sehen, ob die Abfrage index verwendet. Hier ist mein Ergebnis, der mobile Schlüssel meiner Sammlung ist ähnlich wie bei Ihrer photos.id:
%Vor%Ich hoffe, Ihnen zu helfen!
Da MongoDB 2.0 $exists
Abfragen sollten einen Index verwenden. Leider ist dieses Update in der neuesten Version verschwunden und wird in MongoDB 2.5 behoben