如何将MongoDB旧文档替换为code字段数组化的新文档?
MongoDB批量合并文档并替换旧数据
现有文档结构
{ user: '123', code: 'abc', uses: [...] }, { user: '123', code: 'def', uses: [...] },
目标文档结构
希望将同user的文档合并,把单个值的code字段改为数组,合并后结构如下:
{ user: '123', code: ['abc', 'def'], uses: [...] },
聚合尝试过程
最初的错误尝试
使用以下聚合语句时,仅能将code转为单元素数组,无法合并同user的多条记录:
schema.aggregate([ { $unwind: '$uses' }, { $group: { _id: '$_id', user: { $first: '$user' }, code: { $addToSet: '$code' }, uses: { $addToSet: '$uses' } } } ]);
调整后的正确聚合
修改分组键为user后,得到了符合预期的结果:
[ { $unwind: '$uses' }, { $group: { _id: '$user', code: { $addToSet: '$code' }, uses: { $addToSet: '$uses' } } } ]
问题出在原语句以_id分组(每个文档_id唯一,无法合并同user数据),改为以user分组后,成功将同user的code合并为数组,同时完成uses的去重合并。
当前需求
已通过聚合得到正确的新文档结构,现有400+旧文档需要批量替换,不想手动操作,如何用聚合结果替换数据库中的旧文档?
内容的提问来源于stack exchange,提问作者vvv
相关产品推荐
相关产品推荐

