MongoDB聚合$project阶段如何批量复制字段并设置新值?
MongoDB聚合$project阶段批量处理嵌套字段并添加自定义后缀
如果你不想手动逐个写出suggest_foo下的所有字段,想批量提取并给每个字段值加上自定义后缀,可以用MongoDB的$objectToArray、$map和$arrayToObject组合实现,具体聚合代码如下:
fooSchema.aggregate([ // 其他聚合阶段... { $project: { processedFields: { $arrayToObject: { $map: { input: { $objectToArray: "$suggest_foo" }, as: "item", in: { k: "$$item.k", v: { $concat: ["$$item.v", " maybe you like"] } } } } } } }, // 将处理后的字段提升到根层级 { $replaceRoot: { newRoot: "$processedFields" } } ])
代码逻辑说明:
$objectToArray: "$suggest_foo":把嵌套对象suggest_foo转成[{k: "foo1", v: "Foo1"}, ...]格式的键值对数组$map:遍历数组,对每个元素的字段值用$concat拼接指定后缀$arrayToObject:把处理后的数组重新转回对象格式$replaceRoot:将处理后的对象设为文档根结构,得到目标输出
执行后会生成你期望的结果:
{ foo1: 'Foo1 maybe you like', foo2: 'Foo2 maybe you like', foo3: 'Foo3 maybe you like', foo4: 'Foo4 maybe you like', foo5: 'Foo5 maybe you like', }
内容的提问来源于stack exchange,提问作者Epple
相关产品推荐
相关产品推荐

