У меня есть документ на монго, как показано ниже;
{
"_id" : "123",
"info" : {
"batch" : "Batch1-Minor"
},
"batchElements" : {
"elements" : [
{
"_id" : "elementId1",
"type": "ABC"
},
{
"_id" : "elementId2",
"type": "ABC"
}
]
}
}
Как можно сгенерировать агрегированный вывод путем изменения поля $info.batch
внутри elements
путем объединения $info.batch
и $batchElements.elements._id
Ожидаемый результат:
{
"_id" : "123",
"info" : {
"batch" : "Batch1-Minor"
},
"batchElements" : {
"elements" : [
{
"_id" : "Batch1-Minor-elementId1",
"type": "ABC"
},
{
"_id" : "Batch1-Minor-elementId2",
"type": "ABC"
}
]
}
}
Всего 1 ответ
С помощью приведенного ниже запроса мы batchElements.elements
итерацию по batchElements.elements
и формируем объекты с type
& _id
& finally $map
, чтобы batchElements.elements
массив объектов обратно в batchElements.elements
где $addFields
добавит поле в фактический документ. Попробуйте это:
db.yourCollectionName.aggregate([{
$addFields: {
'batchElements.elements': {
$map:
{
input: "$batchElements.elements",
as: "each",
in: { type: '$$each.type', '_id': { $concat: ["$info.batch", "-", "$$each._id"] } }
/** So if you've multiple fields in each object then instead of listing all, You need to use
in: { $mergeObjects: ["$$each", { '_id': { $concat: ["$info.batch", "-", "$$each._id"] } }] } */
}
}
}
}])