2018年9月7日(週五)
阿新 • • 發佈:2018-12-09
聚合
特點:從多個文件分組,在各個分組內進行多種操作,並返回結果
聚合有三種方式
- aggregation pipeline 管道聚合
- map-reduce
- single purpose aggregation methods 單一聚合
管道聚合 目前我常用的方式
文件分別通過多級管道,管道內可以進行任何操作,並最終返回結果 例如:
db.admins.aggregate([
{
$match:{ //do somethings }
},
{
$group: { //do somethings }
}
])
管道聚合常用的操作符
- $group
- $match
- $lookup
- $project
- $sort
- $skip
管道聚合優化
預測優化
- 原因:聚合會將整個集合全部放入管道中,這樣會降低速度而且可能會超過記憶體限制,所以如果只需要集合中部分資料,那麼僅僅傳入這些資料就可以
- 操作:主要是操作符為: $match 和 $limit 放在一般操作的前面,減少後續的資料量
合併優化
- 同操作符的合併
- $lookup + $unwind 的合併
聚合管道的限制
結果集大小限制
BSON的限制:每個document不超過16MB,如果超過了,在管道內部不會報錯,但是返回結果集時會報錯
記憶體限制
管道內部允許佔用100MB的RAM,超過該記憶體時,mongodb會丟擲錯誤,如果想使用大資料集合,
可以使用 allowDiskUse選項開啟管道階段,資料寫入臨時檔案
單一聚合
提供了 db.collection.count() 和 db.collection.distinct()
文字索引
特點:
- 快速執行文字查詢操作,支援精確,模糊等多種匹配
- 支援所有字串及字串的陣列
- 必須含有文字索引,且文字索引唯一
- 使用$test和$search檢索