如何用MongoDB updateMany处理嵌套数组用户合并去重?
使用MongoDB updateMany批量替换数组元素并去重
要实现将所有文档中user2替换为user1,同时自动去除重复的user1,可以通过带聚合管道的updateMany完成,具体命令如下:
db.collection.updateMany( { users: "user2" }, [ { $set: { users: { $setUnion: [ { $map: { input: "$users", as: "user", in: { $cond: [{ $eq: ["$$user", "user2"] }, "user1", "$$user"] } } } ] } } } ] )
命令逻辑说明:
- 匹配目标文档:通过
{ users: "user2" }筛选所有包含user2的文档,不包含user2的文档不会被修改。 - 替换元素:用
$map遍历users数组,将所有user2替换为user1。例如:[user2, user4]→[user1, user4][user1, user2, user3]→[user1, user1, user3]
- 自动去重:通过
$setUnion对替换后的数组去重,自动移除重复的user1,最终得到符合要求的结果:- 原第一个文档变为
[user1, user4] - 原第二个文档变为
[user1, user3]
- 原第一个文档变为
注:$setUnion返回无序集合,符合题目中“用户顺序无关紧要”的要求。
内容的提问来源于stack exchange,提问作者Lasse Johansen
相关产品推荐
相关产品推荐

