如何计算聚合中生成的分组对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何计算聚合中生成的分组对象?相关的知识,希望对你有一定的参考价值。

以一种聪明的方式。简单的分页任务。我有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 }
) 

这将从300开始为我提供10个对象。凉。如何获得分组对象的总数?

[$count阶段不允许我保留分组结果

执行此技巧:

{$group: {_id: null, $totalCount:{$sum:1}, $results: { "$push": "$$ROOT"}}

然后取消分组将破坏我的极限,并且看起来不是很聪明。

并且,当然,不能再进行最后一次$ count的无限制的另一种聚合。因为速度。

我很乐意提供任何建议。

答案

首先,我认为您需要切换$limit$skip平台的位置。

由于按name进行分组,因此可以在该字段上使用Mongo的distinct并检查数组的length,如下所示:

let names = await db.collection.distinct("name");
let totalLength = names.length - 300;

以上是关于如何计算聚合中生成的分组对象?的主要内容,如果未能解决你的问题,请参考以下文章

Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法

C#如何从Tao库中获取OpenGL中生成的对象的大小

如何在 KMM(kotlin 本机)共享模块中读取 Swift 框架库中生成的对象数组

为什么我不能在此片段中生成唯一对象数组?

数据聚合与分组运算

Python分组