2016-04-12 37 views
4

嘿,我试图从给定的MarkLogic数据库获取所有文档名称/ URI的列表。如何从数据库marklogic中获取文档uri名称列表?

我发现这行计算器: 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的新手,有人可以帮助我吗?

+0

提示:一次试图提出一个问题.. – grtjn

回答

2

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

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

更多见fn:doc。如果您想检查文件是否存在,只是用fn:doc()一个URI:

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

感谢它的工作! – happybayes

+0

我发现另一个函数来检查文档是否存在 – happybayes

+1

这种方法遍历所有文档,读取它们,然后为每个文档调用一个函数。泰勒的答案要高效得多。 –

0

另一种选择找到,如果该文件存在:

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

这可以工作,但要注意这会创建一个URI锁。在创建新文档时需要检查uri是否已存在时非常有用。 – grtjn

9

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

如果你想检查是否存在文档使用

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

+1

您的意思是[fn:doc-available()](http://docs.marklogic.com/fn:doc-available)? –

+2

是的,我感谢。用正确的名称更新答案。我正在使用手机应用程序,并从内存中进行。 –

3

1-如果您已经使用集合,那么你可以使用

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需要启用。

相关问题