2016-04-12 12 views
4

Hey ich versuche, die Liste aller Dokumentnamen/URI aus einer bestimmten MarkLogic-Datenbank zu bekommen.Wie erhalte ich eine Liste von Dokumentenuri-Namen aus einer Datenbank marklogic?

fand ich diese Zeile in Stackoverflow: How to get total number of documents in Marklogic database?

..., die die Anzahl der Dokumente in einer Datenbank erhalten. Ich bin mir nicht sicher, wie ich dies ändern könnte, um alle Dokument-URIs aufzulisten.

Auch eine Dokument-URI wollte ich sehen, ob es in der Datenbank existiert?

habe ich versucht, die folgenden, kann aber die gleichen

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

Ich brauche einen Xquery Befehl wie dies nicht erreichen. Ich bin neu bei Marklogic, kann mir jemand dabei helfen?

+0

Tipp: versuchen Sie, eine Frage auf einmal zu stellen .. – grtjn

Antwort

2

Fn: doc() gibt eine Liste aller Dokumente zurück, wenn kein Parameter angegeben ist, oder gibt das Dokument zurück, wenn ein URI angegeben wird. So aufzulisten alle URIs in einer Datenbank verwenden:

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

Siehe fn:doc für mehr. Wenn Sie, ob ein Dokument existiert überprüfen möchten, verwenden Sie einfach fn:doc() mit einem URI:

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

danke es hat funktioniert! – happybayes

+0

Ich habe eine andere Funktion gefunden, um zu überprüfen, ob das Dokument existiert – happybayes

+1

Dieser Ansatz durchläuft alle Dokumente, liest sie ein und ruft dann für jedes eine Funktion auf. Tylers Antwort ist viel effizienter. –

0

Eine andere Möglichkeit zu finden, wenn das Dokument vorhanden:

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

Das funktioniert, aber Vorsicht, dass dies eine URI-Sperre erstellt. Sehr nützlich, wenn Sie beim Erstellen neuer Dokumente prüfen müssen, ob bereits eine URL vorhanden ist. – grtjn

9

Wenn alle müssen Sie aus der Datenbank zu erhalten ist Die Liste der URI verwenden cts:uris(). Es wird nur die uri zurückgeben und erfordert nicht die vollständigen Dokumente wie fn:doc() zurückgeben würde. Wenn das uri-Lexikon auf Datenbankebene auf "true" gesetzt ist, wird es nur in einem Speicherindex aktiviert.

Wenn Sie überprüfen möchten, ob ein Dokument

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

+1

Meinten Sie [fn: doc-available()] (http://docs.marklogic.com/fn:doc-available)? –

+2

Ja, ich danke. Die Antwort wurde mit dem richtigen Namen aktualisiert. Ich benutzte die Telefon-App und machte es aus dem Gedächtnis. –

3

1- verwenden existiert Wenn Sie Sammlung verwendet haben, dann können Sie

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

2- verwenden Wenn Sie gleiche Verzeichnis haben Struktur dann verwenden Sie

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

3- Wenn Sie keinen der obigen Fälle verwendet haben, können Sie cts:uris() verwenden. Bitte beachten Sie, dass cts:uris(), URI Lexicon aktiviert sein muss.