java Mongo DB 根据条件更新字段

问题描述 投票:0回答:1

我正在使用

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

我怎样才能实现这个目标?谢谢你的帮助

mongodb spring-data-mongodb
1个回答
0
投票

我不相信你可以使用更新调用。相反,您必须使用聚合管道,因为这就是 $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 的方法(仍然使用聚合管道),但我目前没有时间进行调查。

© www.soinside.com 2019 - 2024. All rights reserved.