原文路徑
https://docs.mongodb.org/manual/tutorial/optimize-query-performance-with-indexes-and-projections/
創(chuàng)建支持查詢的索引
索引可以極大的提升查詢速度,對于搜索多個字段的查詢炼绘,可以使用復(fù)合索引贞言。索引支持查詢、更新炼杖、聚合管道的某些步驟。mongodb的可以從升序盗迟、降序讀取索引坤邪,因此單鍵索引的順序并無所謂。如果被索引的數(shù)據(jù)是以下類型罚缕,那么它們可能更加高效的存儲在索引中
- 二進(jìn)制子類型艇纺,值在0-7或者128-135并且
- 字節(jié)數(shù)組的大小為:0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,32
限制查詢結(jié)果的數(shù)量,減少網(wǎng)絡(luò)負(fù)載
使用limit()
使用投影(projection)只返回必要的字段
使用$hint來選擇特定的索引
雖然查詢優(yōu)化器會自動選擇最合適的索引邮弹,然而可以使用hit()強(qiáng)制使用某個索引黔衡。
使用修改更新器(update modifier) 來執(zhí)行服務(wù)器端的操作
這樣可以避免每次更新按照下面流程:
- 選擇獲取文檔
- 在客戶端進(jìn)行簡單修改
- 將整個文檔寫入服務(wù)器。
修改更新器簡單介紹
修改更新器包括以下:
- $inc 增加字段的值腌乡,格式為
{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }
- $mul 乘除法
- $rename 重命名
- $setOnInSert 如果該更新操作插入了一個文檔盟劫,那么設(shè)置字段的值
- $set 設(shè)置字段的值
- $unset 刪除某個字段
- $min 只在指定的值小于當(dāng)前值時更新該字段
- $max 和$min相反
- $currentDate 設(shè)置字段的值為當(dāng)前時間