Orm 如何在MarkLogic中查询文档并处理结果

Orm 如何在MarkLogic中查询文档并处理结果,orm,nosql,marklogic,Orm,Nosql,Marklogic,我一直在学习教程页面,但在我的思维中,似乎有一个基本的脱节,即从RDBMS系统过渡。我正在使用MarkLogic并通过JavaAPI处理这个数据库交互,重点是教程文档中概述的通过POJO方法进行搜索访问 到目前为止,我的参考主要来自这里: 我的设想是: 我有一系列的文件。为了简单起见,我们称之为“书”。我正在将这些书写入数据库,如下所示: jsonDocMgr.write("/" + book.getID() + "/", new StringHandle(

我一直在学习教程页面,但在我的思维中,似乎有一个基本的脱节,即从RDBMS系统过渡。我正在使用MarkLogic并通过JavaAPI处理这个数据库交互,重点是教程文档中概述的通过POJO方法进行搜索访问

到目前为止,我的参考主要来自这里:

我的设想是:

我有一系列的文件。为了简单起见,我们称之为“书”。我正在将这些书写入数据库,如下所示:

   jsonDocMgr.write("/" + book.getID() + "/",
            new StringHandle(
                    "{name: \""+book.getID()+"\","+
                        "chaps: "+ book.getNumChaps()+","+
                        "pages: "+ book.getNumPages()+","+
                    "}"));
我想要执行以下类型的操作:

-查询名称为“book*”的所有文档(因为ID由book0、book1、book2等表示) 其中chaps>3。仅对于这些文档,我希望通过将页数减少一半来修改页数

在RDBMS中,我会使用类似jdbcTemplate的东西,并获得一个结果集供我迭代。对于每次迭代,我都知道我使用的是一条记录(也就是一本书),解析结果集中的字段值,记下ID,然后相应地更新DB

有了MarkLogic,我就沉浸在不同处理程序和管理器的海洋中……它们似乎都没有遵循带有游标抽象的结果集模式。最后,我想做一个两步操作,检查章节数,然后更新特定URI的页面字段


最常见的方法是什么?这似乎是最基本的操作…

试试高级Java API,看看它是否适合您。使用创建,然后使用

在较低的级别上,与ResultSet最匹配的是类。这里的例子很好。对于更新,Java和MarkLogic之间的交互模型与JDBC和SQL稍有不同。没有<代码>选择。。。用于更新语法


最有效的底层技术是在一个XQuery事务中选择和更新,类似于存储过程。然而,这需要对XQuery有很好的了解。另一种低级方法是使用XCC,这需要较少的XQuery知识。

代码中的一个小问题。。。您肯定不想像在示例代码中那样以“/”结束JSON文档URI。您应该以“.json”或其他扩展名或无扩展名结尾,但绝对不是“/”,因为这在服务器中是专门处理的。

那么,将这些逻辑中的一部分从数据库交互级别中拉出是否更有意义?执行ORM并获取我的POJO,然后制作mods,并在给定的URI处更新文档?或者,这是NoSQL land中的反模式吗?如果您不介意在选择文档和更新文档之间冒险让其他人更改文档,那么您可以这样做。然而,我认为您会关心原子性,所以我建议在高级API、XCC或纯XQuery选择和更新操作中使用多语句事务。