xquery - 如何列出 MarkLogic 数据库中的所有根目录和子目录?
问题描述
MarkLogic 允许使用类似结构的伪“目录”组织数据库中的文档,该结构由加载任何给定文档时使用的 URI 定义。这些 URI 用于查找和查询文档(使用fn:doc()
),并列出特定目录或子目录中的所有文档(使用xdmp:directory()
)。
但是,似乎没有任何方法可以“查看”或列出数据库中附加到文档的所有目录或子目录,正如您在典型的目录结构文件系统中所期望的那样。在线和 SO 上有一些旧的解决方案指出了在数据库中列出根目录的方法,但没有一个允许子目录,也没有一个像运行一段代码来生成完整的目录列表一样简单。
有没有办法在 MarkLogic 中列出数据库中的所有根目录和/或子目录?
解决方案
实际上有一个简单的方法可以做到这一点,使用 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提供此处使用的初始代码。
推荐阅读
- python-3.x - Spyder3安装问题:Segmentation fault (core dumped)
- plot - 在笔记本中显示 julia 中的图(使用 juliaBox)
- php - 拉拉维尔 | 检索具有关系的集合,但特定 ID 除外
- python - python中是否有用于分类数据的聚合列表函数
- python - 计算字符串Python3.6中子字符串实例的最快方法
- aws-lambda - API Gateway 中的 OpenAPI 和 Lambda 集成
- css - WordPress 5.0.3 | 图像未正确调整大小
- python - 从 Python 脚本如何运行其他 Python 脚本?
- java - android.view.InflateException:二进制 XML 文件第 19 行:无法解析索引 1 处的属性
- javascript - 如何将函数的结果放入 html 表单元素中