MongoDB教學
MongoDB快速入門
MongoDB歷史
MongoDB特點
MongoDB數據庫的優點
MongoDB安裝配置(Windows)
MongoDB安裝配置(Ubuntu)
MongoDB安裝配置(RedHat/CentOS)
MongoDB數據建模
MongoDB創建數據庫
MongoDB刪除數據庫
MongoDB創建集合
MongoDB刪除集合
MongoDB數據類型
MongoDB插入文檔
MongoDB查詢文檔
MongoDB更新文檔
MongoDB刪除文檔
MongoDB投影(選擇字段)
MongoDB限制記錄數
MongoDB排序記錄
MongoDB索引
MongoDB聚合
MongoDB複製
MongoDB分片
MongoDB備份與恢復
MongoDB部署
Java連接MongoDB操作
Python連接MongoDB操作
PHP連接MongoDB操作
Ruby連接MongoDB操作
MongoDB覆蓋查詢
在本章中,我們將瞭解覆蓋查詢。
什麼是覆蓋查詢?
根據官方MongoDB文檔,覆蓋查詢是一個查詢,其中 -
- 查詢中的所有字段都是索引的一部分。
- 查詢中返回的所有字段都在同一個索引中。
由於查詢中存在的所有字段都是索引的一部分,所以MongoDB查詢指定條件匹配,並使用相同的索引返回結果,而不會實際查找文檔。由於索引存在於RAM/內存中,與通過掃描文檔獲取數據相比,從索引獲取數據更快。
使用覆蓋查詢
要測試覆蓋的查詢,請在users
集合中考慮以下文檔 -
{
"_id": ObjectId("234324fd852426020001111"),
"contact": "13800138000",
"dob": "1991-11-11",
"gender": "M",
"name": "Maxsu",
"user_name": "user_maxsu"
}
首先使用以下查詢在users
集合 的字段:gender
和 user_name
上創建一個複合索引 -
> db.users.ensureIndex({gender:1,user_name:1})
現在,這個索引將覆蓋以下查詢 -
>db.users.find({gender:"M"},{user_name:1,_id:0})
也就是說,對於上述查詢,MongoDB不會查找數據庫文檔。相反,它將從索引數據中獲取所需的數據。
由於索引不包括_id
字段,在上面示例中,已經將其從查詢的結果集中明確排除,因爲MongoDB默認情況下在每個查詢中返回_id
字段。 所以下面的查詢不會在上面創建的索引中被覆蓋(查詢有返回_id
字段) -
>db.users.find({gender:"M"},{user_name:1})
最後,請記住,如果有下列情況,則索引無法覆蓋查詢 -
- 任何索引的字段是一個數組
- 任何索引的字段是一個子文檔