Группа вложенных массивов Mongodb с количеством массивов значений ключей - PullRequest
1 голос
/ 30 октября 2019

У меня есть структура mongodb, как показано ниже:

{
"_id":"123456789",
"name":"item name 1",
"variants":[
    {
    "size":"150 ml",
    "filters":[

    {"name":"filter 1",
    "value":"value 1"},
    {"name":"filter 2",
     "value":"value 2"}
  ]
   } 
]
},

{
"_id":"987654321",
"name":"item name 1",
"variants":[
    {
    "size":"200 ml",
    "filters":[

    {"name":"filter 1",
    "value":"value 2"},
    {"name":"filter 2",
     "value":"value 1"}
  ]
   } 
]
}

Теперь я хочу количество фильтров с группой по имени и значению. т.е.

[{filter 1:[{value:value 1, count:10}, {value: value 2, count:5}]},
{filter 2:[{value:value 1, count:5}, {value: value 2, count:2}]}

или

  [{name:filter 1, value:value 1, count:10}, {name:filter 1, value:value 2, 
count:5}]

как этого добиться с помощью агрегирования mongodb и группового запроса?

1 Ответ

3 голосов
/ 30 октября 2019

Вы можете попробовать этот способ:

db.collection.aggregate([
    { $unwind: "$variants" },
    { $unwind: "$variants.filters" },
    { $group:
        {
            _id: "$variants.filters",
            count:{$sum:1}
        }
    },
    { $addFields: {"name" : "$_id.name", "value" : "$_id.value"}},
    { $project: {_id: 0} }
]);

Рабочий пример на https://mongoplayground.net/p/an2xVfDusJn.

...