Ниже приведен фрагмент кода, который я использую для одной из функций
declare function local:matchCounts($Id as xs:string, $status as xs:string) as xs:int {
xdmp:estimate(cts:search(/count, cts:and-query((
cts:element-attribute-value-query(xs:QName("count"), xs:QName("Id"), $Id, "exact"),
cts:element-attribute-value-query(xs:QName("child"), xs:QName("MatchStatus"), $status, "exact")
)), "unfiltered"))
};
declare function local:saveCountsMatchC($Id as xs:string) {
let $evenCount := local:matchCounts($Id, "even")
let $oddCount := local:matchCounts($Id, "odd")
return ($evenCount, $oddCount)
};
declare function local:matchingProcess($Id as xs:string) {
let $total-records := 1000
let $batch-size := 50
let $pagination := 0
let $bs :=
for $records in 1 to fn:ceiling($total-records div $batch-size )
let $start := fn:sum($pagination + 1)
let $end := fn:sum($batch-size + $pagination)
let $_ := xdmp:set($pagination, $end)
return
xdmp:spawn-function
(
function() {
for $each at $pos in ($start to $end)
let $id := sem:uuid-string()
let $xml := if(($pos mod 2) eq 0) then <count Id='{$Id}'><child MatchStatus='even'></child></count>
else <count Id='{$Id}'><child MatchStatus='odd'></child></count>
return xdmp:document-insert(concat("/", $id, ".xml"), $xml)
},
<options xmlns="xdmp:eval"><result>{fn:true()}</result><commit>auto</commit><update>true</update></options>
)
let $_ := $bs
return local:saveCountsMatchC($Id)
};
local:matchingProcess("1")
Здесь необходимо выполнить итерацию 1000 документов, используя размер пакета 50, поэтому в основном я использую функцию spawn для создания 20 пакетов размером 50, который вставляет 1000 документов в мою базу данных.
Как только эти документы вставлены, мне нужно прочитать эти документы в той же транзакции. Здесь 500 документов имеют MatchStatus = 'odd', а 500 документов имеют MatchStatus = 'even'
Запрос должен вернуть (500 500) в качестве вывода; Вместо этого он возвращает (0,0)
Я использую опцию <result>{fn:true()}</results>
, чтобы мой следующий оператор ожидал завершения всей задачи вызова, но это не принесло пользы.
Кто-нибудь может мне помочь с требованием?
Примечание. Необходимо вставить 1000 документов, а затем прочитать их только в том же вызове функции