對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}
);