根据其他字段为数组的每个对象添加字段



我有以下数据数组:

{
_id: 5f5726ef7d475a61a95c5e0c,
attributes: [
{
values: [
{ name: '1' }
],
},
{ 
values: [
{ name: '2' }
]
}
],
attr1: [
{ name: "Study Code" },
{ name: "Patient Study" }
]
}

我需要添加相应的attr1基于索引的对象。所以结果是:

{
_id: 5f5726ef7d475a61a95c5e0c,
attributes: [
{
values: [
{ name: '1' }
],
},
{ 
values: [
{ name: '2' }
]
},
],
attr1: [
{
name: "Study Code",
values: [{ name: "1" }]
},
{
name: "Patient Study",
values: [{ name: "2" }]
}
],
}

我想知道是否可能在MongoDB中使用聚合$addFields

查询
  • 查询工作,如果数组大小相同
  • ziparray生成[[member1_1 member2_1], ....]
  • 映射合并member1_1,member2_1到文档

Playmongo

aggregate(
[{"$set": {"attr1": {"$zip": {"inputs": ["$attributes", "$attr1"]}}}},
{"$set": 
{"attr1": 
{"$map": 
{"input": "$attr1",
"in": 
{"$mergeObjects": 
[{"$arrayElemAt": ["$$this", 1]},
{"$arrayElemAt": ["$$this", 0]}]}}}}}])

您可以使用$zip

db.collection.aggregate([
{
"$project": {
attributes: {
"$zip": {
"inputs": [
"$attributes",
"$attr1"
]
}
}
}
}
])

这是Mongo游乐场供您参考。

最新更新