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