首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >marklogic林中所有文档名称的列表

marklogic林中所有文档名称的列表
EN

Stack Overflow用户
提问于 2018-04-24 15:02:46
回答 2查看 319关注 0票数 1

我只想在森林里找到所有的文件名。

我知道森林名称(ABC),我需要找到森林中的所有文件(ABC)。我的输出应该是这样的。

森林ABC

代码语言:javascript
复制
A.xml
B.xml
C.xml

等等..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-25 02:16:26

为了列出来自特定森林的所有URI,可以使用cts:uris()并在第5个参数中指定目录id:

代码语言:javascript
复制
cts:uris((), (), cts:true-query(), (), xdmp:forest("ABC"))

您的评论表明,您试图列出来自特定林中的所有URI的原因是,您可以删除重复的URI。

下面的代码可以用于从指定的林中获取所有URI,如果它们是重复的,则从该林中删除它们。

如果试图读取文档属性并引发XDMP异常,则捕获该异常,然后从问题林中删除另一个事务中的文档。

代码语言:javascript
复制
(: 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 ()
  }

根据此林中有多少文档,您可能会遇到超时问题。您可能会考虑将其作为一个PROCESS-MODULE.运行,其中在 URIs模块中选择了富余URIS,然后在中单独处理每个检查/删除。

票数 2
EN

Stack Overflow用户

发布于 2018-04-24 15:30:41

搜索和词汇表查找可能受到林的限制,因此您应该能够使用类似于以下内容的调用从URI词典中获取文档名称:

代码语言:javascript
复制
cts.values(cts.uriReference(), null, null, null, null, xdmp.forest('ABC'))

也就是说,在森林中查找文档名称的动机并不多见。你想做什么?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50004963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档