MongoDB如何批量转换列数据结构并存储到新列
MongoDB批量生成列B的解决方案
可以实现批量更新,不需要逐行处理。你之前的代码问题在于直接将整个数组$A赋值给了key字段,导致生成的是单个对象而非数组对象列表。正确的做法是使用MongoDB的$map聚合操作符,遍历数组A的每个元素,生成对应的对象。
正确的批量更新代码
table.update_many({}, [ { "$set": { "B": { "$map": { "input": "$A", "as": "item", "in": {"key": "$$item", "level": 1} } } } } ])
代码说明
$map操作符会遍历input指定的$A数组,将每个元素赋值给as定义的变量item(用$$item引用)in字段定义了每个元素要转换的结构,这里生成包含key(对应数组元素)和固定level:1的对象- 整个
$map的执行结果就是你期望的对象数组,直接赋值给字段B
注意事项
该写法要求MongoDB版本在4.2及以上,因为从这个版本开始支持在update_many中使用聚合管道作为更新操作。
执行后,每条数据的B字段会被更新为:
[ { key: 1, level: 1 }, { key: 2, level: 1 }, { key: 3, level: 1 }, { key: 4, level: 1 } ]
内容的提问来源于stack exchange,提问作者Kundan
相关产品推荐
相关产品推荐

