2016-04-12 38 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需要啓用。

相關問題