【问题标题】:How to get list of document uri names from a database marklogic?如何从数据库标记逻辑中获取文档 uri 名称列表?
【发布时间】:2016-08-03 17:08:03
【问题描述】:

嘿,我正在尝试从给定的 MarkLogic 数据库中获取所有文档名称 /uri 的列表。

我在 stackoverflow 中找到了这一行: How to get total number of documents in Marklogic database?

...这将获取数据库中的文档数。我不确定如何修改它以列出所有文档 URI。

还给了一个文档 URI,我想看看它是否存在于数据库中?

我尝试了以下方法,但无法达到同样的效果

for $x in xdmp:directory("/myDirectory/", "1")
return
fn:document-uri($x)

我需要一个像这样的 Xquery 命令。我是marklogic的新手,有人可以帮我吗?

【问题讨论】:

  • 提示:尝试一次问一个问题..

标签: xml database xquery marklogic xquery-sql


【解决方案1】:

fn:doc() 如果没有给出参数,将返回所有文档的列表,如果给出 URI,则返回文档。因此,要列出数据库中的所有 URI,请使用:

for $x in fn:doc()
   return fn:document-uri($x)

请参阅fn:doc 了解更多信息。如果要检查文档是否存在,只需使用带有 URI 的fn:doc()

fn:doc("/example/uri.xml")

【讨论】:

  • 我找到了另一个检查文档是否存在的函数
  • 这种方法遍历所有文档,读取它们,然后为每个文档调用一个函数。泰勒的回答效率更高。
  • 这是我发现列出 MarkLogic 数据库中所有文档的唯一方法。它适用于 ML 的 queryconsole。我刚刚开始,我需要这个来测试一些东西。谢谢!
【解决方案2】:

查找文档是否存在的另一个选项:

xdmp:exists(doc("uri.xml"))

【讨论】:

  • 这行得通,但要注意这会创建一个 URI 锁。当您需要在创建新文档时检查 uri 是否已存在时非常有用。
【解决方案3】:

如果您只需要从数据库中获取 uri 列表,请使用 cts:uris()。它只会返回 uri,不需要像 fn:doc() 那样返回完整的文档。如果 uri 词典在数据库级别设置为 true,则它只会在内存索引中启动。

如果要检查文档是否存在,请使用

fn:doc-available("uri of document")

【讨论】:

  • 是的,谢谢。用正确的名称更新了答案。我正在使用电话应用程序,并且是凭记忆进行的。
【解决方案4】:

1-如果你使用过collection那么你可以使用

for $each in collection("collection-name") return fn:document-uri($each)

2- 如果你有相同的目录结构,那么使用

for $each in xdmp:directory("/myDirectory/", "infinity") return fn:document-uri($each)

3- 如果您没有使用过上述任何一种情况,您可以使用cts:uris() 请注意,要使用cts:uris(), URI Lexicon,需要启用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 2015-07-30
    相关资源
    最近更新 更多