2016-04-12 1 views
4

ちょっと、特定のMarkLogicデータベースからすべてのドキュメント名/ uriのリストを取得しようとしています。 How to get total number of documents in Marklogic database?データベースmarklogicからドキュメントURIのリストを取得するには?

...データベース内の文書の数を取得します:

私はstackoverflowの中に、この行を見つけました。私はどのようにすべてのドキュメントのURIをリストするためにこれを変更するか分からない。

はまた、私はそれがデータベースに存在するかどうかを確認したかった文書のURIを与えられましたか?

私は次のことを試してみましたが、私はちょうどこのようにするXQueryコマンドを必要とする同じ

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

を達成できませんでした。私はmarklogicに新しいです、誰かが私にこれを助けることができますか?

+0

ヒント..時点で、それが働いた – grtjn

答えて

2

FN:DOC()は、パラメータが与えられない場合、すべてのドキュメントのリストを返す、またはURIが指定されている場合、ドキュメントを返します。だから、データベース内のすべてのURIを一覧表示するために使用します。

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

は多くのためfn:docを参照してください。あなたは文書が存在するかどうかを確認したい場合は、単にURIでfn:doc()を使用します。

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

おかげで1つの質問をしてみてください! – 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を有効にする必要がありますのでご注意ください。

関連する問題