我有以下架构{ id: 123, values:[ {valueId: "12444", name: "asd"}, {valueId: "555", name: "www"}, ]}我想将其转换为(合并name为单个字符串){ id: 123, values: "asdwww"}我尝试过下面的聚合,它将所有名称值放入一个数组中$project: { attributes: { "$map": { "input": "$attributes", "as": "attr", "in": { "id": "$$attr.id", "values": "$$attr.values.name" } } } },这使得它变成{ id: 123, values:[ "asd", "www" ]}我想要将值作为单个字符串值"asd,www"或"asdwww"
1 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
你需要$reduce而不是$map
:
db.collection.aggregate([
{
$project: {
_id: 1,
values: {
$reduce: {
input: "$values",
initialValue: "",
in: { $concat: [ "$$value", "$$this.name" ] }
}
}
}
}
])
添加回答
举报
0/150
提交
取消