我正在使用
spring-boot-starter-data-mongodb
并且我正在执行一次更新,以便在一次操作中更新多条记录
UpdateResult result = collection.updateMany(query, update);
更新字段是这样定义的
Bson update = Updates.combine(
Updates.set(field1, 1),
Updates.set(field2, 2);
但现在我想为 field3 定义一个条件更新。如果
field3 == null
那么 field3=3
我怎样才能实现这个目标?谢谢你的帮助
我不相信你可以使用更新调用。相反,您必须使用聚合管道,因为这就是 $cond 可用的地方。
BasicDBList compareList = new BasicDBList();
compareList.add(null);
compareList.add("$field3");
collection.aggregate(List.of(
query,
new BasicDBObject()
.append("$set", new BasicDBObject("field3",
new BasicDBObject("$cond",
new BasicDBObject("if",
new BasicDBObject("$eq", compareList))
.append("then", 3)
.append("else", "$field3")))
.append("field1", 1)
.append("field2", 2)),
merge(collectionName))).first();
我怀疑还有一种使用 ConditionalOperators 类代替 BasicDBObject 的方法(仍然使用聚合管道),但我目前没有时间进行调查。