[英]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)
。 然而,這提出了一些考慮:
update(Entity entity)
在文檔級別上工作,它還會更新文檔中未更改的部分,這並不理想。我猜遇到的錯誤只是暫時通過提供的標准PanacheQL 說明了mongoDB的Panache
限制。
應該使用可以通過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.