能否使用MongoDB聚合框架完成指定格式的数据结构重构
MongoDB 聚合框架实现数组结构自定义转换
完全可以通过MongoDB聚合框架完成要求的结构调整,无需将数据拉取到应用层做二次加工
核心转换逻辑落地
要求的转换规则可以直接通过聚合管道的数组遍历、动态对象构造能力实现,对应操作拆解:
- 定位文档中的
array字段,逐一遍历数组内的每个元素 - 提取元素内的
date字段值,作为转换后对象的唯一键 - 取同一元素内
nestedArray的取值,作为上述键关联的数组值 - 将每个元素转换生成的单键对象重新拼接为新数组,替换原有结构
可直接运行的聚合实现
以下代码适配MongoDB 3.4及以上版本(该版本首次支持$arrayToObject动态对象构造能力):
db.你的集合名.aggregate([ { $set: { array: { $map: { input: "$array", as: "item", in: { $arrayToObject: [ [ { k: "$$item.date", v: "$$item.nestedArray" } ] ] } } } } } ])
运行效果
针对输入的初始结构:
{ "array": [ {"date": "27-08-12", "nestedArray": [0, 1, 2]}, {"date": "18-08-12", "nestedArray": [0, 2]} ] }
管道执行后输出的结果完全匹配目标结构:
{ "array": [ {"27-08-12": [0, 1, 2]}, {"18-08-12": [0, 2]} ] }
实用提示
- 如果需要保留原始
array字段的内容,可以将代码中赋值的目标字段名从array改为自定义字段(比如convertedArray),避免覆盖原始数据 - 若MongoDB版本低于3.4,需先升级数据库版本才能正常运行该聚合逻辑
内容的提问来源于stack exchange,提问作者nukuutos
相关产品推荐
相关产品推荐

