如何在marklogic中的单个查询中查询两个数据库

时间:2016-01-14 11:52:49

标签: marklogic marklogic-8

我正在将数据从一个拓扑复制到另一个拓扑(比如拓扑1的数据在DB1中,拓扑2的数据在DB 2中),我想在单个查询中对两个数据库执行检查以检查是否所有通过检查Uris或Hash值,文件是否相同。这可能吗?

1 个答案:

答案 0 :(得分:3)

使用哈希检查只有在您预先计算哈希值并将其存储在文档内或其属性中时才能很好地执行。但基于uris的检查非常简单。以下解决方案无法无限扩展,但应该可以很好地工作到几百万uris。只需将其复制粘贴到QConsole中,然后针对您选择的数据库运行它,并将$other-db-name值更改为要比较的数据库名称:

xquery version "1.0-ml";

let $other-db-name := "OtherDocuments"
return
xdmp:eval(
  '
    xquery version "1.0-ml";

    declare variable $uris as map:map external;

    "In other, but not here:",
    map:keys(cts:uris((), "map") - $uris),

    "Here, but not in other:",
    map:keys($uris - cts:uris((), "map"))
  ',
  (
    xs:QName("uris"), cts:uris((), "map")
  ),
  <options xmlns="xdmp:eval">
    <database>{xdmp:database($other-db-name)}</database>
  </options>
)

HTH!