English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Kapitel werden wir die abdeckenden Abfragen lernen.
Laut der offiziellen MongoDB-Dokumentation sind abdeckende Abfragen solche Abfragen, bei denen-
Alle Felder in der Abfrage sind Teil des Indexes.
Alle Felder, die in der Abfrage zurückgegeben werden, sind im gleichen Index enthalten.
Da alle Felder in der Abfrage Teil des Indexes sind, wird MongoDB die Suchkriterien matchen und die Ergebnisse mit demselben Index zurückgeben, ohne tatsächlich den Inhalt der Dokumente zu betrachten. Da der Index im RAM existiert, ist das Abrufen von Daten aus dem Index viel schneller als das Scannen von Dokumenten.
sers
Die folgenden Dokumente im Set-
{ "_id": ObjectId("53402597d852426020000003", "contact": ""987654321", "dob": "0"1-01-1991", "gender": "M", "name": "Tom Benzamin", "user_name": "tombenzamin" }
Wir werden zunächst einen kombinierten Index für die Felder gender und user_name im users-Set mit folgender Abfrage erstellen–
>db.users.createIndex({gender:1,user_name:1}) { "createdCollectionAutomatically": false, "numIndexesBefore": 1, "numIndexesAfter": 2, "ok": 1 }
Jetzt wird der Index die folgenden Abfragen umfassen-
>db.users.find({gender:"M"},{user_name:1,_id:0}) {"user_name":"tombenzamin"}
Das bedeutet, für die obige Abfrage wird MongoDB nicht die Dokumente der Datenbank überprüfen. Stattdessen wird es die erforderlichen Daten aus den Indexdaten abrufen, was sehr schnell ist.
Da der Index nicht enthält_id
Feld, daher haben wir es aus dem Ergebnissatz der Abfrage ausdrücklich ausgeschlossen, da MongoDB standardmäßig in jeder Abfrage das _id-Feld zurückgibt. Daher enthält die folgende Abfrage nicht den Index, der oben erstellt wurde -
>db.users.find({gender:"M"},{user_name:1}) {"_id":"ObjectId("53402597d852426020000003{"user_name":"tombenzamin"}
Am Ende, denken Sie daran, wenn, Index kann die Abfrage nicht abdecken
Jeglicher Indexfeld ist ein Array
Jeglicher Indexfeld ist ein Unterdokument