我有一个看起来像这样的模型:
{
"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"
}
]
}
]
}
但是,由于这是一个嵌套对象,因此在使用以下方法更新它时遇到了困难:
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)
在文档级别上工作,因此它也会更新文档的未更改部分,这是不理想的。答案 0 :(得分:2)
我想在通过提供的 PanacheQL 提供的标准的那一刻,遇到的错误只是对{em> mongoDB 的限制Panache
。
应该使用可以通过PanacheMongoEntityBase#mongoCollection
访问的本地 mongoDB Java API解决此问题:
mongoCollection().updateOne(
eq("projectId", projectId),
new Document("$set", new Document("testCaseList", newTestCaseList))
);