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

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

Если мы просто воспользуемся приведенными ниже данными, пара 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. Вопрос: Как выбрать отдельные значения из массива «Числа» в приведенном выше условии?


person Srivatsa N    schedule 10.04.2013    source источник


Ответы (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.

person Srivatsa N    schedule 22.04.2013