2016-04-12 2 views
4

Эй Я пытаюсь получить список всех имен документов/uri из данной базы данных MarkLogic.Как получить список имен uri документа из базы данных marklogic?

Я нашел эту строку в 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, может кто-нибудь помочь мне в этом?

+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. Очень полезно, когда вам нужно проверить, существует ли ури при создании новых документов. – 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 необходимо включить.