English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDB Coverage-Abfrage

In diesem Kapitel werden wir die abdeckenden Abfragen lernen.

Was ist eine abdeckende Abfrage?

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.

Verwenden Sie die abdeckende Abfrage

sersDie 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_idFeld, 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