Java MongoDB Panache更新文档中的嵌套对象
我有一个模型,看起来像这样:Java MongoDB Panache更新文档中的嵌套对象,java,mongodb,quarkus,quarkus-panache,Java,Mongodb,Quarkus,Quarkus Panache,我有一个模型,看起来像这样: { “项目名称”:“我的第一个项目”, “projectId”:“1234”, “测试案例列表”:[ { “testCaseName”:“TestCase1”, “步骤”:[ { “操作”:“单击此项”, “结果”:“通过” }, { “行动”:“点击该按钮”, “结果”:“通过” } ] }, { “testCaseName”:“TestCase2”, “步骤”:[ { “行动”:“点击他”, “结果”:“通过” }, { “行动”:“点击她”, “结果”:“通过
{
“项目名称”:“我的第一个项目”,
“projectId”:“1234”,
“测试案例列表”:[
{
“testCaseName”:“TestCase1”,
“步骤”:[
{
“操作”:“单击此项”,
“结果”:“通过”
},
{
“行动”:“点击该按钮”,
“结果”:“通过”
}
]
},
{
“testCaseName”:“TestCase2”,
“步骤”:[
{
“行动”:“点击他”,
“结果”:“通过”
},
{
“行动”:“点击她”,
“结果”:“通过”
}
]
}
]
}
但是,由于这是一个嵌套对象,我很难使用以下方法更新它:
默认PanacheUpdate更新(字符串更新、对象…参数)
我正在使用存储库模式,下面是我的代码片段:
List newTestCaseList=。。。;
更新(“testCaseList”,newTestCaseList)。其中(“projectId=?1”,projectId);
这实际上会引发以下错误:
org.bson.json.JsonParseException:json读取器应为“:”但找到“,”。
位于org.bson.json.JsonReader.readBsonType(JsonReader.java:149)
位于org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:82)
位于org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
位于org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:101)
位于org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
位于org.bson.BsonDocument.parse(BsonDocument.java:63)
位于io.quarkus.mongodb.panache.runtime.MongoOperations.executeUpdate(MongoOperations.java:634)
位于io.quarkus.mongodb.panache.runtime.MongoOperations.update(MongoOperations.java:629)
我目前的做法
当前对我有效的方法是在更新嵌套对象时使用默认的void update(实体)
。
然而,这提出了一些考虑因素:
update(Entity)
在文档级别工作,因此它还将更新文档中未更改的部分,这并不理想我猜遇到的错误只说明了目前通过PanacheQL提供的标准对mongoDB的
Panache
限制
应该使用本机mongoDB Java API解决这个问题,该API可以通过PanacomengoEntityBase#mongoCollection
访问:
mongoCollection().updateOne(
等式(“projectd”,projectd),
新文档(“$set”,新文档(“testCaseList”,newTestCaseList))
);
更新(实体)
是设计用于更新实体的方法。是的,您需要首先加载实体,因为它是一个完整的更新<代码>更新(字符串)是为多文档更新而设计的,当然您应该能够将其用于单个文档。您能否激活查询调试并使用生成的查询更新您的问题?您还可以通过TestCase.mongoCollection()
访问集合,并对其执行本机查询。