У меня есть простой документ с одним полем как пара ключ-значение. Я хочу просто выполнить групповую операцию в Агрегации над этими ключами и добавить их значения. Но ключи в паре не фиксированы и могут быть любыми.MongoDB: Операция Aggregation Group над динамической парой ключ-значение
Вот пример документа.
{
_id: 349587843,
matchPair: {
3 : 21,
9 : 4,
7 : 32
}
},
{
_id: 349587478,
matchPair: {
7 : 11,
54 : 32,
9 : 7,
2 : 19
}
}
И я хочу получить что-то вроде следующего.
{
_id : 3,
count : 21
},
{
_id : 9,
count : 11
},
{
_id : 7,
count : 43
},
{
_id : 54,
count : 32
},
{
_id : 2,
count : 19
}
У меня есть следующий запрос в виду, и попытался использовать $unwind
операцию, но она не работает, вероятно, потому, что «matchPair» не является массивом, и я не знаю, что указать на $sum
операции.
db.MatchPairs.aggregate([
{ "$unwind" : "$matchPair" },
{ "$group" : {
_id: "$matchPair",
count : { $sum : $matchPair }
} }
]);
Я мог бы также попробовать Map-Reduce, но для этого тоже нужно emit()
ключей и значений по имени.
Я уверен, что есть простое решение, но я не могу понять это.
это невозможно с помощью структуры агрегации, если ваши клавиши являются динамическими, поэтому вам нужно перейти на mapReduce – felix
Я вижу. Не могли бы вы рассказать мне, как я буду указывать ключи и значения в функции 'emit()'? –
Пример уменьшения карты для аналогичной проблемы: http://stackoverflow.com/a/41634637/2965883 – ares