English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questa sezione, impareremo le query coperte.
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.
Per testare le query coperte, vederesers
I 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"}
最后,请记住,如果,索引不能覆盖查询
任何索引字段都是数组
任何索引字段都是子文档