簡體   English   中英

MongoDB Panache 更新文檔中的嵌套對象

[英]MongoDB Panache Updating nested objects within Document

我有一個 model,它看起來像這樣:

{
  "projectName": "MyFirstProject",
  "projectId": "1234",
  "testCaseList": [
    {
      "testCaseName": "TestCase1",
      "steps": [
        {
          "Action": "Click on this",
          "Result": "pass"
        },
        {
          "Action": "Click on that",
          "Result": "pass"
        }
      ]
    },
    {
      "testCaseName": "TestCase2",
      "steps": [
        {
          "Action": "Click on him",
          "Result": "pass"
        },
        {
          "Action": "Click on her",
          "Result": "pass"
        }
      ]
    }
  ]
}

但是,由於這是一個嵌套的 object,我很難使用以下方法更新它:

default PanacheUpdate update(String update, Object... params)

我正在使用存儲庫模式,下面是我的代碼片段:

List<TestCase> newTestCaseList = ...;
update("testCaseList", newTestCaseList).where("projectId=?1",projectId);

這實際上引發了以下錯誤:

org.bson.json.JsonParseException: JSON reader was expecting ':' but found ','.
at org.bson.json.JsonReader.readBsonType(JsonReader.java:149)
    at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:82)
    at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
    at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:101)
    at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
    at org.bson.BsonDocument.parse(BsonDocument.java:63)
    at io.quarkus.mongodb.panache.runtime.MongoOperations.executeUpdate(MongoOperations.java:634)
    at io.quarkus.mongodb.panache.runtime.MongoOperations.update(MongoOperations.java:629)

我目前的方法

目前對我有用的是在更新嵌套對象時使用default void update(Entity entity) 然而,這提出了一些考慮:

  1. 需要額外的代碼來獲取整個文檔、解析並更新所需的字段
  2. 由於update(Entity entity)在文檔級別上工作,它還會更新文檔中未更改的部分,這並不理想。

我猜遇到的錯誤只是暫時通過提供的標准PanacheQL 說明mongoDBPanache限制。

應該使用可以通過PanacheMongoEntityBase#mongoCollection訪問的本機mongoDB Java API 來解決該問題:

mongoCollection().updateOne(
        eq("projectId", projectId),
        new Document("$set", new Document("testCaseList", newTestCaseList))
);

暫無
暫無

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

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