Mongodb агрегатный раскручиваемый массив, вложенный в массив, и подсчет появления каждого уникального значения - PullRequest
0 голосов
/ 12 марта 2019

В mongodb я работаю над документами отзывов для идентификатора продукта и хочу подсчитать количество появлений каждого уникального мнения и отфильтровать их по трем самым лучшим мнениям.

В каждом массиве мнений могут быть разные значения мнений и в любом порядке.

 {
    "_id": {
    "$oid": "5c80d2f24fd7f31977184333" },
    "Review_details": [
    {
        "opinions": [
            {
                "opinion1": "strong",
                "opinion2": "metal",
                "opinion3": "flex"
            }
        ]
    },
    {
        "product_category": "HW"
    },
    {
        "usecase": [
            {
                "how": "self",
                "quantity": "10 pieces",
                "frequency": "once a month"
            }
        ]
    },
    {
        "summary": "kashdh ashdajhd jkhjhasd jkhas  kasjhjkdh as khadsj hakjhd."
    } ] }, {
    "_id": {
    "$oid": "5c80d2f24fd7f31977184334" },
    "Review_details": [
    {
        "opinions": [
            {
                "opinion1": "flex",
                "opinion2": "plastic",
                "opinion3": "strong"
            }
        ]
    },
    {
        "product_category": "HW"
    },
    {
        "usecase": [
            {
                "how": "self",
                "quantity": "10 pieces",
                "frequency": "once a month"
            }
        ]
    },
    {
        "summary": "kashdh ashdajhd jkhjhasd jkhas  kasjhjkdh as khadsj hakjhd."
    } ] }

в конце я хочу получить 3 лучших подсчитанных мнения-

{
"flex": 2,
"strong": 2,
"metal": 1        
}

1 Ответ

0 голосов
/ 13 марта 2019
{ $unwind: "$Review_details" },
{ $unwind: "$Review_details.opinions" },
{ $project: { opinions: 1, opinions: { $objectToArray: "$Review_details.opinions" } } },
{ $unwind: "$opinions" },
{ $sortByCount: "$opinions.v" },
{ $limit : 3 }
...