根据各自属性中的条件加入两组二进制文档

时间:2018-01-24 00:28:49

标签: marklogic

给定两组二进制文档(驻留在两个不同的集合中),我想执行左连接的等价物,其中键是对象属性的一部分。

我正在做这些事情:

Bitmap

哪一点不起作用......

我会非常感谢任何建议!

1 个答案:

答案 0 :(得分:3)

MarkLogic允许您将属性片段存储在与文档片段相同的URI中。您可以使用xdmp:document-set-property执行此操作,建立templateId和objectId属性。然后,您可以使用cts:properties-fragment-query查询这些属性。您还可以使用xdmp:document-properties检查特定文档的属性。类似下面的代码,虽然你可能不得不在属性上摆弄XPath。

let $template-query:= 
  cts:and-query((
    cts:collection-query("finances"),
    cts:collection-query("http://marklogic.com/collections/dls/latest-version"),
    cts:collection-query("templates")
  ))
let $doc-query := 
  cts:collection-query((
    cts:collection-query("finances"),
    cts:collection-query("http://marklogic.com/collections/dls/latest-version"),
    cts:collection-query("documents")
  ))

for $template-uri in cts:uris((), (), $template-query)
for $doc-uri in cts:uris((), (), $doc-query)
where xdmp:document-properties($doc-uri)/templateId = xdmp:document-properties(template-uri)/objectId
  and xdmp:document-properties($doc-uri)/updatedDate < xdmp:document-properties(template-uri)/updatedDate 
return fn:doc($doc-uri)

编辑:原始版本将集合与OR而不是AND

组合在一起