MarkLogic java API加入2个文档

时间:2013-05-10 16:12:43

标签: marklogic

有没有办法使用MarkLogic的Java API在marklogic数据库中连接2个文档?

例如,假设有以下两个文件:

doc1.xml:

<a>    
    <id>123</id>
    <doc2ID>111</doc2ID>
    <first_name>John</first_name>
</a>

doc2.xml:

<b>
    <id>111</id>
    <doc1ID>123</doc1ID>
    <last_name>Smith</last_name>
    <age>25</age>
</b>

我可以在MarkLogic中进行以下查询:检索所有记录,其中first name = John,last_name = Smith,age&gt; 20? 在sql中你会做这样的事情: 从doc1中选择a.first_name,b.last_name a JOIN doc2 b ON(a.doc2ID = b.id)WHERE a.first_name ='John'和b.last_name ='Smith'和b.age&gt; 24

2 个答案:

答案 0 :(得分:2)

如果您只想将一个文档用作另一个文档的过滤器,则可以使用实现子查询的自定义约束发送查询选项。

如果您确实想要加入文档,则必须创建一个资源服务扩展,以在cts:search()级别实现连接。

然而,退一步,您应该考虑对文档进行非规范化,这样您就不需要像在关系数据库中那样加入。您在上面提供的文档实质上是表行,它不利用文档数据库的强大功能和灵活性。使用关系模型和关系查询不是文档数据库中的最佳方法。

答案 1 :(得分:0)

您的样本无效xml(没有根元素),并且可能有多个子元素。没有有效的xml,答案很难准确。

一般方法是使用FLOWR表达式:

for $master in doc("doc1.xml")//something,   
    $detail in doc("doc2.xml")//something 
where $master/doc2ID = $detail/id
return ($master/first_name/string(), $detail/last_name/string())