首页 > 解决方案 > 按唯一值分组并获得每个值的总计

问题描述

我正在尝试计算文档中特定值的出现次数。我的文档结构如下:

  id: ObjectID("ABC123")
StoreItems: Array
    0: Object
        Type: "Apple"
        Color: "Green"
        Size: "Small"
        Weight: "5"
    1: Object
        Type: "Orange"
        Color: "Orange"
        Size: "Small"
        Weight: "8"
    2: Object
        Type: "Grapes"
        Color: "Green"
        Size: "Small"
        Weight: "8"

当我使用以下内容时,它只给我分组的总数,而不是每个特定类型:

[
    {
        '$unwind': {
            'path': '$StoreItems'
        }
    }, {
        '$match': {
            'StoreItems.Color': 'Green'
        }
    }, {
        '$group': {
            '_id': 'Type', 
            'Count': {
                '$sum': 1
            }
        }
    }
]

我想得到一个结果:Apples: 1, Grapes:3

但是,我只得到一个结果:Type: 4

标签: mongodbmongodb-queryaggregation-framework

解决方案


您应该更改构建_idfor$group语句的方式。目前它是一个静态值Type,而您需要引用StoreItems.Type(以美元开头):

{
    '$group': {
        '_id': '$StoreItems.Type', 
        'Count': {
            '$sum': 1
        }
    }
}

推荐阅读