Kann MongoDB einen Index verwenden, wenn das Vorhandensein eines Feldes mit dem Operator $ exists geprüft wird?

7

Wenn ich Daten in meiner users Sammlung habe, die wie folgt aussieht:

%Vor%

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?

    
bantic 18.11.2011, 00:29
quelle

3 Antworten

12

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.

    
RameshVel 18.11.2011, 06:16
quelle
6

$ 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!

    
jianpx 31.01.2013 13:48
quelle
3

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

    
High6 03.12.2013 09:50
quelle

Tags und Links