Подтвердить что ты не робот

Выбор отличительных значений из массива в MongoDB

У меня есть имя коллекции Alpha_Num, оно имеет следующую структуру. Я пытаюсь выяснить, какая пара Alphabet-Numerals будет отображаться максимальное количество раз?

Если мы просто перейдем к приведенным ниже данным, пара abcd-123 появится дважды, так как пара efgh-10001, но вторая не подходит для меня, поскольку она появляется в том же документе.

{
    "_id" : 12345,
    "Alphabet" : "abcd",
        "Numerals" : [
            "123",
            "456",
            "2345"
        ]
}
{
    "_id" : 123456,
    "Alphabet" : "efgh",
    "Numerals" : [
            "10001",
            "10001",
            "1002"
        ]
}

{
    "_id" : 123456567,
    "Alphabet" : "abcd",
        "Numerals" : [
            "123"
        ]
}

Я попытался использовать работу с кадрами агрегации, что-то вроде ниже

db.Alpha_Num.aggregate([
                     {"$unwind":"$Numerals"},
                     {"$group":
                              {"_id":{"Alpha":"$Alphabet","Num":"$Numerals"},
                               "count":{$sum:1}}
                     },
                     {"$sort":{"count":-1}}
                     ])

Проблема в этом запросе заключается в том, что она дает пару efgh-10001 дважды. Вопрос: Как выбрать различные значения из массива "Числа" в вышеуказанном условии?

4b9b3361

Ответ 1

Проблема решена.

db.Alpha_Num.aggregate([{
     "$unwind": "$Numerals"
}, {
     "$group": {
             _id: {
                     "_id": "$_id",
                     "Alpha": "$Alphabet"
             },
             Num: {
                     $addToSet: "$Numerals"
             }
     }
}, {
     "$unwind": "$Num"
}, {
     "$group": {
             _id: {
                     "Alplha": "$_id.Alpha",
                     "Num": "$Num"
             },
             count: {
                     "$sum": 1
             }
     }
}])

Группировка с использованием $addToSet и повторное удаление снова сделали трюк. Получил ответ от одного из онлайн-курсов 10gen.