如何在MongoDB聚合框架中从对象字段生成数组字段
MongoDB聚合提取数组对象指定字段为新数组
你可以使用MongoDB的$map操作符直接遍历tags数组,提取每个对象的v值组成新的tags_values数组,无需使用$unwind(避免拆分数组后再分组的繁琐操作)。
方案一:先添加新字段再移除原字段
适合保留原有$project逻辑的场景:
db.collection.aggregate([ // 你的原有$project阶段 { /* 这里放你之前的$project操作代码 */ }, // 添加tags_values字段,提取tags数组中每个元素的v值 { $addFields: { tags_values: { $map: { input: "$tags", as: "tag", in: "$$tag.v" } } } }, // 移除原有的tags字段 { $project: { tags: 0 } } ])
方案二:在单个$project阶段完成
如果需要直接替换输出结构,可以在$project里直接生成目标字段:
db.collection.aggregate([ { $project: { identificador: 1, tp: 1, fotos: 1, qt: 1, dt: 1, cdt: 1, qt_tags: 1, tags_values: { $map: { input: "$tags", as: "tag", in: "$$tag.v" } } } } ])
原理说明
$map会遍历指定的输入数组(这里是$tags),对每个元素执行in中的表达式,最终返回由所有表达式结果组成的新数组。- 不管
tags数组包含多少个元素,该操作都能自动处理,生成对应长度的tags_values数组。
内容的提问来源于stack exchange,提问作者Gabriel Padilha
相关产品推荐
相关产品推荐

