3

有没有办法利用 MarkLogic 的 Java API 在 marklogic 数据库中加入 2 个文档?

例如,假设有以下 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 中进行以下查询:检索名字 = John、last_name = Smith 和年龄 > 20 的所有记录?在 sql 中,您将执行以下操作: Select a.first_name, b.last_name from doc1 a JOIN doc2 b ON (a.doc2ID = b.id) WHERE a.first_name = 'John' and b.last_name = 'Smith' and年龄 > 24

4

2 回答 2

2

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

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

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

于 2013-05-10T18:02:40.660 回答
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())
于 2013-05-10T16:51:27.883 回答