Spring Data MongoDB批量更新时如何按条件更新字段?
解决方案
要实现仅当field3为null时才将其设置为3的条件更新,你可以通过两种方式实现,以下是具体代码和说明:
方法1:使用MongoDB聚合表达式(原生语法风格)
利用$cond聚合操作符判断字段状态,满足条件时赋值,否则保留原字段值:
Bson update = Updates.combine( Updates.set("field1", 1), Updates.set("field2", 2), // 条件更新field3:为null时设为3,否则保留原值 Updates.set("field3", new Document("$cond", Arrays.asList( new Document("$eq", Arrays.asList("$field3", null)), 3, "$field3" ))) ); UpdateResult result = collection.updateMany(query, update);
方法2:使用Spring Data MongoDB的Updates.when方法
通过Spring封装的API直接指定更新前置条件,仅满足条件时执行更新:
Bson update = Updates.combine( Updates.set("field1", 1), Updates.set("field2", 2), // 当field3等于null时,设置其值为3 Updates.when(Filters.eq("field3", null), Updates.set("field3", 3)) ); UpdateResult result = collection.updateMany(query, update);
额外说明
如果需要区分「field3不存在」和「field3存在但为null」两种场景,可以将条件替换为:
Filters.or(Filters.eq("field3", null), Filters.exists("field3", false))
内容的提问来源于stack exchange,提问作者Andre Silva
相关产品推荐
相关产品推荐

