mongodb - 使用 mongodb 聚合的多个字段的不同计数

我正在尝试通过一个 MongoDB 聚合查询来计算多个字段的不同值。

这是我的数据:

{
    "car_type": "suv",
    "color": "red",
    "num_doors": 4
},
{
    "car_type": "hatchback",
    "color": "blue",
    "num_doors": 4
},
{
    "car_type": "wagon",
    "color": "red",
    "num_doors": 4
}

我想要每个字段的不同计数:

distinct_count_car_type=3
distinct_count_color=2
distinct_count_num_doors=1

我能够对多个字段进行分组,然后进行不同的计数,但它只能让我对第一个字段进行计数。不是所有的人。 而且数据量很大。

最佳答案

运行以下聚合管道应该会给你想要的结果:

db.collection.aggregate([
    {
        "$group": {
            "_id": null,
            "distinct_car_types": { "$addToSet": "$car_type" },
            "distinct_colors": { "$addToSet": "$color" },
            "distinct_num_doors": { "$addToSet": "$num_doors" }
        }
    },
    {
        "$project": {
            "distinct_count_car_type": { "$size": "$distinct_car_types" },
            "distinct_count_color": { "$size": "$distinct_colors" },
            "distinct_count_num_doors": { "$size": "$distinct_num_doors" }
        }
    }
])

https://stackoverflow.com/questions/46471856/

相关文章:

javascript - 为已登录的用户手动创建 Passport session

node.js - Mongoose 类型错误 : User is not a constructo

node.js - 我应该使用什么数据类型来使用 MongoDB 存储图像?

java - Spring MongoTemplate - 将聚合结果映射到集合(例如 List 和

java - 如何防止连接池在 mongodb 上使用 java 驱动程序关闭?

json - 使用 Python 从 MongoDB 文档创建 JSON 文件

mongodb - 使用键值对将 mongo 数组转换为对象

java - Mongo 将 Document 转换为 DBObject

c# - ReadBsonType 只能在 State 为 Type 时调用,不能在 State 为

node.js - 查找未邀请任何用户的用户