【问题标题】:How do I list all root directories and sub-directories in a MarkLogic database?如何列出 MarkLogic 数据库中的所有根目录和子目录?
【发布时间】:2019-06-28 23:17:15
【问题描述】:

MarkLogic 允许在数据库中使用类似结构的伪“目录”来组织文档,该结构由加载任何给定文档时使用的 URI 定义。这些 URI 用于查找和查询文档(使用 fn:doc()),并列出特定目录或子目录中的所有文档(使用 xdmp:directory())。

但是,似乎没有任何方法可以“查看”或列出数据库中附加到文档的所有目录或子目录,正如您在典型的目录结构文件系统中所期望的那样。在线和 SO 上有一些旧的解决方案指出了在数据库中列出根目录的方法,但没有一个允许子目录,也没有一个像运行一段代码来生成完整的目录列表一样简单。

有没有办法在 MarkLogic 中列出数据库中的所有根目录和/或子目录?

【问题讨论】:

    标签: xquery marklogic


    【解决方案1】:

    实际上有一个简单的方法可以做到这一点,使用 MarkLogic 的 URI 词典和一些基本的字符串操作。 (请参阅https://docs.marklogic.com/cts:uris 了解更多信息)。

    要查看 MarkLogic 数据库中给定目录中的所有子目录,只需在查询控制台中运行以下代码,并将 $root-dir 变量设置为所需的父目录。要在 MarkLogic 中从根目录开始查找所有目录,请将 $root-dir 设置为 "/"

    此代码列出所有嵌套子目录递归,显示从指定根目录开始的完整目录层次结构。

        (: List all subdirectories present within a ML root directory :)
        xquery version "1.0-ml";
    
        let $root-dir := "/directory/"
    
        let $uris := cts:uris((), (), cts:directory-query($root-dir, "infinity"))
        let $subdirs :=
          for $uri in $uris
          return fn:string-join(fn:tokenize(fn:replace($uri, $root-dir, "/"), "/")[1 to fn:last() - 1], "/") || "/"
        let $distinct-subdirs := fn:distinct-values($subdirs)
        return $distinct-subdirs
    

    感谢mblakele 提供此处使用的初始代码。

    【讨论】:

      猜你喜欢
      • 2011-11-09
      • 2012-11-14
      • 2019-07-06
      • 1970-01-01
      • 2012-09-02
      • 2016-01-16
      • 2014-10-16
      相关资源
      最近更新 更多