簡體   English   中英

MongoDB Java 驅動:如何使用$cond算子?

[英]MongoDB Java Driver: How to use $cond operator?

我編寫了以下 MongoDB 更新查詢:

db.getCollection("product").update(
  {},
  [
    {
      $set: {
        availability: {
          $cond: [
            {
              $eq: ["$availability", true],
            },
            "Yes",
            "No",
          ],
        },
      },
    }
  ]
);

更新product集合中的所有文檔:根據當前值設置availability屬性的新值。

我正在嘗試為 MongoDB Java 驅動程序重寫上面的查詢:

db.getCollection("product")
     .updateMany(new BsonDocument(), Updates.set("available", "YES"));

但我堅持使用$cond運算符,我不知道如何將$cond運算符從 MongoDB 查詢轉換為 Java 驅動程序。

你能建議可能的選擇嗎?

您需要使用需要ClientSession而不是MongoClient的不同變體

UpdateResult updateResult = this.mongoColWrite.
                 updateMany(this.clientSession, new Document(), setUpdateList);

empty doc是條件。 您可以在那里添加任何條件。

您必須提供更新列表。

[
    {
      $set: {
        availability: {
          $cond: [
            {
              $eq: ["$availability", true],
            },
            "Yes",
            "No",
          ],
        },
      },
    }
  ]

LinkedList<Object> condList = new LinkedList<Object>();
LinkedList<Object> eqArray = new LinkedList<Object>();
eqArray.add("$availability");
eqArray.add(true); 
condList.add(new Document("$eq"), eqArray);
condList.add("Yes");
condList.add("No");

Document availDoc = new Document("$cond", condList)
Document setDoc = new Document("$set", availDoc);

LinkedList<Document> setUpdateList = new LinkedList<Document>();
setUpdateList.add(setDoc);

這就是我通常的做法。 每個數組都是一個list 每個 object 都是一個Document

舊版本示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM