我一直在使用教程页面,但似乎在我从RDBMS系统过渡的思路中存在根本性的脱节。我使用MarkLogic并通过Java API处理此数据库交互,重点是通过教程文档中的POJO方法概述进行搜索访问。
到目前为止,我的参考主要来自:http://developer.marklogic.com/learn/java/processing-search-results
我的情况是:
我有一系列文件。我们称他们为“书籍”#39;为简单起见。我将这些书写到我的数据库中是这样的:
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,我充斥着不同的处理程序和管理器...其中任何一个似乎都没有遵循带有游标抽象的ResultSet模式。最后,我想进行两步检查章节计数,然后更新该特定URI的页面字段。
最常见的方法是什么?这似乎是最基本的操作...
答案 0 :(得分:1)
尝试使用高级Java API,看看它是否适合您。使用multi-statement transaction创建query by example,然后使用document operations。
在较低级别,与ResultSet最接近的匹配是ResultSequence类。 http://docs.marklogic.com/javadoc/xcc/overview-summary.html的示例非常好。对于更新,Java和MarkLogic之间的交互模型与JDBC和SQL略有不同。没有SELECT... FOR UPDATE
语法。
最有效的低级技术是在一个XQuery事务中选择和更新,类似于存储过程。但是,这需要对XQuery有很好的了解。另一种低级方法是使用XCC multi-statement transaction,这需要更少的XQuery知识。
答案 1 :(得分:0)
您的代码中的一个小问题...您肯定不希望用" /"结束您的JSON docuement URI。和你的示例代码一样。你应该用" .json"结束它们。或其他一些延期或没有延期,但绝对不是" /"因为这是在服务器中专门处理的。