首页 > 解决方案 > 如何在 MongoDB 中将我的所有文本 _id 字段从“abc”更新为“xxx#abc”

问题描述

我有一个集合,其中_id是一个文本字段。我需要通过添加前缀来更新这个字段,比如xxx#,所以如果一个字段值是“ abc ”它现在必须是“ xxx#abc

我怎么能用 MongoDB 做到这一点?

标签: mongodbmongodb-queryaggregation-framework

解决方案


由于_idMongoDB 文档中的字段是不可变的,因此不能使用.update()'s 执行此操作。由于您需要更新所有文档,请尝试使用聚合的$out阶段重写整个集合:

db.collection.aggregate([{$addFields : {_id : {$concat : ['xxx#','$_id']}}}, {$out : 'collection'}])

注意:因为$out实际上将替换现有集合(或者如果集合不存在给定名称,则创建新集合),非常好地测试此查询,即;在没有阶段的情况下测试此聚合查询$out,如果一切看起来都不错,则应用$out。以其他方式,一旦您认为一切正常,您就可以写入新集合并重命名集合名称。此外,如果您使用的是 MongoDB 版本 >= 4.2,您可以利用$merge


推荐阅读