Группируйте по уникальным значениям и получайте общее количество за каждого - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь подсчитать количество вхождений указанных значений c в документах. У меня есть документы, которые структурированы следующим образом:

  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"

Когда я использую следующее, это только дает мне общее количество групп, а не для каждого конкретного c Тип:

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

Я хочу получить результат: Apples: 1, Grapes:3

Но я только получаю результат: Type: 4

1 Ответ

0 голосов
/ 30 марта 2020

Вы должны изменить способ построения оператора _id для $group. В настоящее время это значение c Type, в то время как вам нужна ссылка на StoreItems.Type (начинается с доллара):

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