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

MongoDB覆盖查询

In questa sezione, impareremo le query coperte.

Cos'è una query coperta?

Secondo la documentazione ufficiale di MongoDB, le query coperte sono di questo tipo, dove-

  • Tutti i campi nella query sono parte dell'indice.

  • Tutti i campi restituiti dalla query sono nello stesso indice.

Poiché tutti i campi presenti nella query sono parte dell'indice, MongoDB eseguirà la condizione di ricerca e utilizzerà lo stesso indice per restituire i risultati senza dover effettivamente visualizzare l'interno del documento. Poiché l'indice esiste nella RAM, è molto più veloce ottenere dati dall'indice rispetto a scansionare i documenti.

Utilizzare query coperte

Per testare le query coperte, vederesersI seguenti documenti nella raccolta-

{
   "_id": ObjectId("53402597d852426020000003"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

Utilizzeremo prima la seguente query per creare un indice composto sui campi gender e user_name per la raccolta users-

>db.users.createIndex({gender:1,user_name:1})
{
	"createdCollectionAutomatically": false,
	"numIndexesBefore": 1,
	"numIndexesAfter": 2,
	"ok": 1
}

Ora, l'indice coprirà le seguenti query-

>db.users.find({gender:"M"},{user_name:1,_id:0})
{"user_name":"tombenzamin"}

也就是说,对于上面的查询,MongoDB不会查看数据库文档。相反,它将从索引数据中获取所需的数据,这是非常快的。

由于索引不包含_id字段,因此我们已将其从查询的结果集中明确排除,因为MongoDB默认情况下会在每个查询中返回_id字段。所以下面的查询不会包含在上面创建的索引中–

>db.users.find({gender:"M"},{user_name:1})
{"_id":"ObjectId("53402597d852426020000003")","user_name":"tombenzamin"}

最后,请记住,如果,索引不能覆盖查询

  • 任何索引字段都是数组

  • 任何索引字段都是子文档