Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoDB Panache更新文档中的嵌套对象_Java_Mongodb_Quarkus_Quarkus Panache - Fatal编程技术网

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()
    访问集合,并对其执行本机查询。