marklogic forest中所有文档名称的列表
List of all document names in marklogic forest
我只是想在森林中找到所有文档名称。
我知道林名称 (ABC),我需要找到该林 (ABC) 中的所有文档。我的输出应该是这样的。
森林 ABC 有
A.xml
B.xml
C.xml
等等...
搜索和词典查找可能会受到林的限制,因此您应该能够通过类似于以下的调用从 URI 词典中获取文档名称:
cts.values(cts.uriReference(), null, null, null, null, xdmp.forest('ABC'))
也就是说,在森林中查找文档名称的常见动机并不多。你想要完成什么?
为了列出来自特定森林的所有 URI,您可以使用 cts:uris()
并在第 5 个参数中指定森林 ID:
cts:uris((), (), cts:true-query(), (), xdmp:forest("ABC"))
您的评论表明您尝试列出特定林中的所有 URI 的原因是为了删除重复的 URI。
下面的代码可用于获取指定林中的所有 URI,如果它们是重复的,然后将它们从该林中删除。
如果您尝试读取文档属性并抛出 XDMP-DBDUPURI 异常,捕获该异常,然后从问题林中的不同事务中删除该文档。
(: update this with the name of problem forest :)
declare variable $PROBLEM-FOREST := xdmp:forest("ABC");
declare variable $URIS := cts:uris((), (), cts:true-query(), (), $PROBLEM-FOREST);
for $uri in $URIS
return
try {
let $properties := xdmp:document-get-properties($uri, xs:QName("foo"))
return ()
} catch($e) {
if ($e/error:code = "XDMP-DBDUPURI") then
xdmp:invoke-function(
function(){ xdmp:document-delete($uri) },
<options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
<database>{$PROBLEM-FOREST}</database>
</options>
)
else ()
}
根据此林中的文档数量,您可能 运行 遇到超时问题。您可以将 运行 视为 CORB job,其中在 URIS-MODULE 中选择 forsts URI,然后在 inspection/delete 中单独处理每个 inspection/delete 过程模块.
我只是想在森林中找到所有文档名称。
我知道林名称 (ABC),我需要找到该林 (ABC) 中的所有文档。我的输出应该是这样的。
森林 ABC 有
A.xml
B.xml
C.xml
等等...
搜索和词典查找可能会受到林的限制,因此您应该能够通过类似于以下的调用从 URI 词典中获取文档名称:
cts.values(cts.uriReference(), null, null, null, null, xdmp.forest('ABC'))
也就是说,在森林中查找文档名称的常见动机并不多。你想要完成什么?
为了列出来自特定森林的所有 URI,您可以使用 cts:uris()
并在第 5 个参数中指定森林 ID:
cts:uris((), (), cts:true-query(), (), xdmp:forest("ABC"))
您的评论表明您尝试列出特定林中的所有 URI 的原因是为了删除重复的 URI。
下面的代码可用于获取指定林中的所有 URI,如果它们是重复的,然后将它们从该林中删除。
如果您尝试读取文档属性并抛出 XDMP-DBDUPURI 异常,捕获该异常,然后从问题林中的不同事务中删除该文档。
(: update this with the name of problem forest :)
declare variable $PROBLEM-FOREST := xdmp:forest("ABC");
declare variable $URIS := cts:uris((), (), cts:true-query(), (), $PROBLEM-FOREST);
for $uri in $URIS
return
try {
let $properties := xdmp:document-get-properties($uri, xs:QName("foo"))
return ()
} catch($e) {
if ($e/error:code = "XDMP-DBDUPURI") then
xdmp:invoke-function(
function(){ xdmp:document-delete($uri) },
<options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
<database>{$PROBLEM-FOREST}</database>
</options>
)
else ()
}
根据此林中的文档数量,您可能 运行 遇到超时问题。您可以将 运行 视为 CORB job,其中在 URIS-MODULE 中选择 forsts URI,然后在 inspection/delete 中单独处理每个 inspection/delete 过程模块.