Java (Spring) / MongoDB:If-Conditional set() 函数

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

我想通过 Java 和 Springframework 修改我的 MongoDB(没有其他)。

在 MongoDB 中它应该是这样的:

Documents.update(
    {some_condition: true, "some field": "some condition"}, 
    {$set: {"status": "value 1"}},
    {multi: true},
    function(err, numAffected) {
        Documents.update(
            {some_condition: true, "some field": {$ne: "some condition"}}, 
            {$set: {"status": "value 2"}},
            {multi: true},
            function(err, numAffected) {
                // All done.
            }
        )
    }
)

现在我需要您的帮助,将其转换为 Java(Spring 框架)。 谢谢你。

我不太擅长在 Java 中使用查询,因此我没有尝试那么多。

java spring mongodb
1个回答
0
投票

您是否尝试使用 if-else 来执行更新? 我建议查看 $cond 运算符来利用 if else 条件。

您可以使用下面的示例使用 $cond 运算符进行转换

db.documents.updateMany(
    { some_condition: true },
    [
        {
            $set: {
                status: {
                    $cond: {
                        if: { $eq: ["$some field", "some condition"] },
                        then: "value 1",
                        else: "value 2"
                    }
                }
            }
        }
    ]
);

等效的 Java 代码如下所示:

public void updateDocuments() {
        Query query = new Query(Criteria.where("someCondition").is(true));
        
        Update update = new Update();
        update.set("status",
                new Document("$cond", 
                    new Document("if", new Document("$eq", Arrays.asList("$someField", "some condition")))
                        .append("then", "value 1")
                        .append("else", "value 2")
                )
        );

        mongoTemplate.updateMulti(query, update, Document.class);
    }
© www.soinside.com 2019 - 2024. All rights reserved.