mongodb獲取aggregate處理結果的總數

對mongodb執行aggregate操作命令得到結果集,前端頁面展示時有時需要做分頁這類場景,需要獲得結果集的總數。將整個結果集都查詢出來往往需要耗費很大網絡io和內存。本文介紹一種方法返回經aggregate處理後結果集的記錄總數。
對3.4之前的mongodb版本,aggregate的stages並沒有提供$count算子返回結果集記錄數,可通過如下方式獲得,對一個結果集記錄中存在的key或者不存在的key進行分組,命令示例如下:

db.getCollection('DeteriorationOsgi').aggregate(
[
    {
        "$match":{
            "_id.date":{
                "$gte":20191001,
                "$lte":20200220
            }
        }
    },
    {
        "$group":{
            "_id":"$_id.deviceId",
            "account":{
                "$last":"$PPPOEUser"
            },
            "number":{
                "$sum":1
            }
        }
    }
    ,{ $group: { _id: null, count: { $sum: 1 } } }    //分組的_id爲null,對於spring data mongodb之類客戶端可能不支持記錄不存在的key,可以指定一個key進行分組,結果相同,例如:deviceId
],
    {'allowDiskUse':true}
);

對於3.4以後的版本aggregate在stages階段提供$count算子,命令示例如下:

db.getCollection('DeteriorationOsgi').aggregate(
[
    {
        "$match":{
            "_id.date":{
                "$gte":20191001,
                "$lte":20200220
            }
        }
    },
    {
        "$group":{
            "_id":"$_id.deviceId",
            "areacode":{
                "$last":"$areacode"
            },
            "number":{
                "$sum":1
            }
        }
    },
    { "$count": "total" }
],
    {'allowDiskUse':true}
);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章