Чтобы вывести список всех URI из определенного леса, вы можете использовать cts:uris()
и указать идентификатор леса в 5-м параметре:
cts:uris((), (), cts:true-query(), (), xdmp:forest("ABC"))
Ваш комментарийпредположил, что причина, по которой вы пытаетесь перечислить все URI из определенного леса, заключалась в том, чтобы вы могли удалить дубликаты.
Приведенный ниже код можно использовать для получения всех URI изуказанный лес, а затем удалите их из этого леса, если они являются дубликатами.
Если вы попытаетесь прочитать свойства документа и будет сгенерировано исключение XDMP-DBDUPURI , перехватите это исключение и затем удалите документ в другой транзакции из проблемного леса.
(: update this with the name of problem forest :)
declare variable $PROBLEM-FOREST := xdmp:forest("ABC");
declare variable $URIS := cts:uris((), (), cts:true-query(), (), $PROBLEM-FOREST);
for $uri in $URIS
return
try {
let $properties := xdmp:document-get-properties($uri, xs:QName("foo"))
return ()
} catch($e) {
if ($e/error:code = "XDMP-DBDUPURI") then
xdmp:invoke-function(
function(){ xdmp:document-delete($uri) },
<options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
<database>{$PROBLEM-FOREST}</database>
</options>
)
else ()
}
В зависимости от количества документов в этом лесу вы можете столкнуться с проблемами тайм-аута.Вы можете запустить это как CORB-задание , в котором URI форсов выбраны в URIS-MODULE , а затем каждая проверка / удаление обрабатывается индивидуально в PROCESS-MODULE .