#mongodb #aggregation-framework
#mongodb #платформа агрегации
Вопрос:
Я застрял в проблеме:
Мне нужно преобразовать:
[ {a:1 , b:2 , c:3} , {a:5, b:6, c:7} ]
В:
[{a:[1,5], b:[2,6] , c: [3,7]}]
Просто найдите общие ключи и сгруппируйте их.
Я не уверен, следует ли мне использовать $project $reduce или $ group. У кого-нибудь есть совет?
Комментарии:
1. Я придумал это mongoplayground.net/p/sm4MTXR-S-n
2. вы знаете, что у вас есть примерно 3 поля с такими именами? или у вас может быть 1, или 2, или 20, например, и вам нужно более общее решение?
Ответ №1:
Чтобы сделать это, мы должны сначала изменить объект на массив, чтобы можно было группировать по ключу. Вы можете проверить это здесь.
{
"$project": {
"_id": 0 // First we have to eliminate the _id and all the other fields that we dont want to group
}
},
{
"$project": {
"arr": {
"$objectToArray": "$ROOT"
}
}
},
Затем мы должны размотать этот массив и сгруппировать ключи.
{
"$unwind": "$arr"
},
{
"$group": {
"_id": "$arr.k",
"field": {
"$push": "$arr.v"
}
}
}
Наконец, мы переназначаем информацию с желаемым результатом.
{
$replaceRoot: {
newRoot: {
$arrayToObject: [
[
{
k: "$_id",
v: "$field"
}
]
]
}
}
}
Комментарии:
1. вы можете добавить еще 2 этапа, чтобы получить ожидаемый результат
2. Правда, мой результат не был точно таким же 🙂