我正在处理具有以下架构的Mongo集合

{ _id: "123", Items: [...] }

我目前有一个管道,它遍历集合,并使用$faceting对Items的内容进行一些聚合.

这看起来是这样的:

"myFacet": [
    "$project": {
       "_id": 1,
       "Name": 1,
       "totalCount": {
           "$size": {
                "$filter": { ... }
           }
       }

    }
]

我想做的就是做和totalCount一样的事情,但再往前一步,只得到distinct个结果的计数.

我知道在正常的聚合中如何做到这一点,首先是$unwind,然后是$match,然后是$group.

但是,如果我可以对$filter中的数组进行进一步的操作,从而获得某种不同的计数,我就有点迷茫了.在我开始重构整个查询之前,我想看看是否有一种方法可以先完成它.

推荐答案

您可以执行以下操作:

"myFacet": [
    {"$project": {
       "_id": 1,
       "Name": 1,
       "data": {"$filter": { ... }}
      }
   },
   {"$project": {
       "_id": 1,
       "Name": 1,
       "totalCount": {$size:'$data'},
       "distinctCount": {$size: {$setIntersection: '$data'}}
   }}
]

Mongodb相关问答推荐

没有文档的MongoDB集合中的不一致,但当我执行count()时,它告诉我有15个文档

如何在Mongo中制作全覆盖索引

Mongo查找条件:不存在

MongoDB:从开始日期和结束日期数组中匹配特定日期的聚合查询

(MongoDB)在同一管道中结合联合和交集

有谁知道这个错误的修复方法(TypeError: Cannot assign to read only property ‘map’ of object '#')

替换 MongoDB 中数组中的嵌入文档

Raft Vs MongoDB 初选

MongoDB:插入重复键更新

MongoError:$subtract 累加​​器是一元运算符

Mongodb 约定包

如何使用原子操作在一个文档中切换布尔字段?

MongoDB:多个 $elemMatch

Mongoose 连接认证失败

在 mongodb 聚合框架中执行 case-statement

具有 AWS 云形成和自动zoom 的 Mongodb 集群

120 个 mongodb 集合与单个集合 - 哪个更有效?

如何使用 mongoose 连接到 mongoDB Atlas

使用 C# 聚合 $lookup

Mongodb同时在多个字段上聚合(计数)