如何在marklogic中一次查询两个数据库

如何在marklogic中一次查询两个数据库,marklogic,marklogic-8,Marklogic,Marklogic 8,我正在将数据从一个拓扑复制到另一个拓扑(假设拓扑1的数据在DB1中,拓扑2的数据在DB 2中),我希望在一个查询中对两个数据库执行检查,通过检查它们的URI或哈希值来检查所有文件是否相同。这可能吗?只有在预先计算哈希并将其存储在文档或其属性中时,使用哈希的检查才会执行良好。但是基于URI的检查是非常直接的。下面的解决方案不会无休止地扩展,但最多可扩展到几百万个URI。只需将其复制粘贴到QConsole中,并针对您选择的数据库运行它,然后将$other db name值更改为要比较的数据库名称:

我正在将数据从一个拓扑复制到另一个拓扑(假设拓扑1的数据在DB1中,拓扑2的数据在DB 2中),我希望在一个查询中对两个数据库执行检查,通过检查它们的URI或哈希值来检查所有文件是否相同。这可能吗?

只有在预先计算哈希并将其存储在文档或其属性中时,使用哈希的检查才会执行良好。但是基于URI的检查是非常直接的。下面的解决方案不会无休止地扩展,但最多可扩展到几百万个URI。只需将其复制粘贴到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>
)
xquery版本“1.0-ml”;
让$other db name:=“其他文档”
返回
xdmp:eval(
'
xquery版本“1.0-ml”;
将变量$URI声明为map:map external;
“在其他地方,但不是这里:”,
map:key(cts:uri((),“map”)-$uri),
“在这里,但不是在其他地方:”,
map:key($uri-cts:uri((),“map”))
',
(
xs:QName(“uri”),cts:uri((),“map”)
),
{xdmp:database($other db name)}
)

向我们展示您所做的工作。另一个选项是在每个数据库中运行“cts:uris()”(结果会自动排序),将输出放入两个文件中,然后从命令行进行区分。感谢您的解决方案。。您能帮助我使用哈希值执行检查吗。。。有时情况是,Uri可能会因文档而异,但内容是相同的。。因此,在这种情况下,我相信哈希检查将是一个更好的解决方案。。