Вопрос по использованию cts: поиск по FLOWR. У меня есть xqy, который просматривает все документы в базе данных и проверяет элемент с меткой времени. Мы создали эту отметку времени при вставке документа. Цель - удалить документы старше x дней.
Теперь мне нужно знать, сколько у меня документов старше x дней, чтобы я мог попробовать выполнить задание CORB по их удалению.
Мой запрос пока работает:
xquery version "1.0-ml";
declare namespace j = "http://marklogic.com/xdmp/json/basic";
declare namespace dikw = 'http://www.example.com/dikw_functions.xqy';
(:let $foo := cts:uris((),(), cts:not-query(cts:element-query(xs:QName("j:dikwmetadata"), cts:element-query(xs:QName("j:data"), cts:and-query(()))))):)
let $uris := cts:uri-match("/twitter/*")[1 to 10]
let $today := fn:current-date()
let $days := xs:dayTimeDuration("P30D")
let $today_minus_x := xs:dateTime($today - $days)
for $uri in $uris (:cts:search(doc(), $random-query):)
let $doc_dikw_date := xdmp:parse-dateTime("[Y0001]-[M01]-[D01] [h01]",xs:string(fn:doc($uri)//j:dikwmetadata//j:timestamp))
let $to_old := if ($today_minus_x >= $doc_dikw_date)
then
true() (: deleted document:)
else
false()
return ($uri,$to_old)
Это работает нормально, но мне нужно знать, сколько их осталось, чтобы увидеть, смогу ли я запустить его из консоли запросов или что мне нужно настроить запланированное задание CORB, выполняющееся каждый день.
Я искал в cts: search что-то вроде:
(:
let $uris2 := cts:search($uris,cts:query(xdmp:parse-dateTime("[Y0001]-[M01]-[D01] [h01]",xs:string(fn:doc($uris)//j:dikwmetadata//j:timestamp))) < $today_minus_x)
:)
Но, кажется, нужны элементы ... нет, я застрял.
Вопросы: есть ли более простой способ найти и подсчитать все документы старше x дней?
<timestamp type="string">2014-02-03 21:16:05.348159</timestamp>
04.02.2014let $d2 := xs:dateTime(fn:doc($uri)//j:dikwmetadata//j:timestamp)
, я получуXDMP-CAST: (err:FORG0001) xs:dateTime(fn:doc($uri)/descendant::j:dikwmetadata/descendant::j:timestamp) -- Invalid cast: xs:untypedAtomic("2014-02-03 21:15:35.036983") cast as xs:dateTime on line 17 expr: xs:dateTime(fn:doc($uri)/descendant::j:dikwmetadata/descendant::j:timestamp)
... так что я думаю, мне нужно сначала обработать документы, чтобы сопоставить строку временной метки? 04.02.2014xs:dateTime(<timestamp type="string">2014-02-03T21:16:05.348159</timestamp>)
04.02.2014