MongoDB如何更新字段不存在或值为null的所有文档
解决方案
错误原因
- 查询条件语法错误:
$or是MongoDB的顶级查询操作符,不能嵌套在单个字段的匹配规则中。 - 默认
update方法仅更新第一条匹配的文档,没有开启批量更新配置的情况下无法修改所有符合要求的记录。
正确实现
写法1:简化版(推荐)
MongoDB中直接查询locations: null会自动匹配两种场景:locations字段不存在、locations字段值为null,不需要额外写$or判断:
db.collection.updateMany( { locations: null }, { $set: { locations: { town: 'downtown' } } } )
写法2:完整$or判断
如果需要明确区分两种匹配逻辑,可使用标准的$or写法:
db.collection.updateMany( { $or: [ { locations: { $exists: false } }, { locations: null } ] }, { $set: { locations: { town: 'downtown' } } } )
兼容旧版本写法
如果使用的MongoDB版本不支持updateMany,可以给update方法增加multi: true参数开启批量更新:
db.collection.update( { locations: null }, { $set: { locations: { town: 'downtown' } } }, { multi: true } )
内容的提问来源于stack exchange,提问作者Ashish Bairwa
相关产品推荐
相关产品推荐

