1. 程式人生 > >2018年9月7日(週五)

2018年9月7日(週五)

聚合

特點:從多個文件分組,在各個分組內進行多種操作,並返回結果

聚合有三種方式

  • 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檢索

建立文字索引