Запрос MongoDB для получения количества значений массива для определенных групп - PullRequest
0 голосов
/ 15 февраля 2019

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

Я написал запрос, но это дает мне вдвое больше из-зараскрутить, я думаю.

Мой запрос:

db.message.aggregate([
{$unwind: '$entities'},
{ "$group": {
    "_id": {
        "color": "$color",
        "entities" :"$entities"
    },
    "count": { "$sum": 1 }
}},
{ "$group": {
    "_id": "$_id.color",
    "count": { "$sum": "$count" },
    "entities": { 
        "$push": { 
            "entity": "$_id.entities",
            "count": "$count"
        },
    }

}}
])

Данные сообщения базы данных:

{
"_id" : ObjectId("5c55f99abf6dc481ccfa7f67"),
"color" : "Red",
"channel" : "google",
"content" : "red color",
"entities" : [ 
    "a", 
    "b"
]
},
{
"_id" : ObjectId("5c57f0a0bf6dc44424e8d371"),
"color" : "Red",
"channel" : "google",
"content" : "red color",
"entities" : [ 
    "a", 
    "b"
]
},{
"_id" : ObjectId("5c5947a4bf6dc462603d87da"),
"color" : "Blue",
"channel" : "google",
"content" : "yo yo",
"entities" : [ 
    "a", 
    "b"
]
 },
{
"_id" : ObjectId("5c6151b9bf6dc4bee8dac8c9"),
"color" : "Blue",
"handle" : "IBM",
"channel" : "twitter",
"content" : "yo yo",
"entities" : [ 
    "a", 
    "b",
    "c"
]
}

(РЕДАКТИРОВАНИЕ) Ожидается следующий вывод:

{
"color" : "Red",
"count" : 2,
"entities" : [ 
    {
        "entity" : "a",
        "count" : 2
    }, 
    {
        "entity" : "b",
        "count" : 2
    }
    ]
},
{
"color" : "Blue",
"count" : 2,
"entities" : [ 
    {
        "entity" : "c",
        "count" : 1
    }, 
    {
        "entity" : "b",
        "count" : 2
    }, 
    {
        "entity" : "a",
        "count" : 2
    }
]
}

Пожалуйста, помогите!.

...