MongoDB中如何移除数组里包含abc.com子串的元素?
MongoDB移除数组中包含指定子串的元素
永久更新文档(修改原集合)
要批量移除所有文档中users数组里包含"abc.com"的元素,使用updateMany搭配$pull操作符和正则表达式:
db.collection.updateMany( {}, // 匹配所有文档,如需指定过滤条件可替换此对象 { $pull: { users: /abc\.com/ // 正则匹配包含"abc.com"的字符串 } } )
执行后,集合内的文档会直接变为你期望的结果。
查询时临时过滤(不修改原数据)
如果仅需在查询结果中返回过滤后的数组,不改动原集合数据,可使用聚合管道的$filter操作符:
db.collection.aggregate([ { $project: { users: { $filter: { input: "$users", cond: { $not: { $regexMatch: { input: "$$this", regex: /abc\.com/ } } } } } } } ])
关键说明
- 正则里的
\.必须转义,否则.会匹配任意字符,无法精准匹配"abc.com"子串。 $pull会彻底移除数组中所有符合条件的元素,适合需要永久修改数据的场景。$filter仅在查询阶段处理数组,原集合数据不受影响,适合临时查看结果的场景。
内容的提问来源于stack exchange,提问作者user14361300
相关产品推荐
相关产品推荐

