【发布时间】:2020-01-21 04:15:05
【问题描述】:
以聪明的方式。 简单的分页任务。我有 1000 个对象,想将它们分组并一次发送到 API 10。
db.getCollection('myCollection').aggregate([
{
"$group": {
"_id": {
"name": "$name",
},
"count": {
"$sum": 1
},
"surnames": {
"$addToSet": "$surname"
},
"objects": {
"$push": "$$ROOT"
},
}
},
{$limit:10},
{$skip:300}
], { allowDiskUse: true }
)
这将给我 10 个对象,从第 300 个开始。凉爽的。 如何获得分组对象的总数?
$count 阶段不允许我保留分组结果
做这个技巧:
{$group: {_id: null, $totalCount:{$sum:1}, $results: { "$push": "$$ROOT"}}
然后取消分组会破坏我的限制并且看起来不是很聪明。
当然,以 $count 作为最后阶段且没有限制进行另一个聚合不是一种选择。因为速度。
我很乐意为您提供任何建议。
【问题讨论】:
-
谢谢米克尔! $Fracet 可以正是我想要的。我将在接下来的几天内对其进行测试并留下评论。
-
您可以先运行
$group,然后使用计数运行$facet -
是的,这就是计划
-
杰普,它正在工作。 @mickl 可以根据您的评论创建一个答案(看这里:...)所以我可以给它加星标是“好答案”?
标签: mongodb pagination aggregation