Вопрос по использованию cts: поиск по FLOWR. У меня есть xqy, который работает над всеми документами в базе данных и проверяет элемент с меткой времени. Мы создали эту временную метку при вставке документа. Цель - удалить документы старше, чем x дней.Marklogic count старые документы с использованием cts: поиск по FLWOR
Теперь мне нужно знать, сколько у меня документов, которые старше, чем х дней, поэтому я могу попробовать работу 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 работа работает каждый день.
Я смотрел в КТС: поиск что-то вроде:
(:
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)
:)
Но это, кажется, нужны элементы ... нет я застрял.
Вопросы: есть ли более простой способ найти и считать все документы старше х дней?
thx для вашего ответа, не уверен, могу ли я использовать этот элемент метки непосредственно так, как вы описываете? ' 2014-02-03 21: 16: 05.348159 ' –
, если я делаю 'let $ d2: = xs: dateTime (fn: doc ($ uri) // j: dikwmetadata // j : timestamp) 'i get' XDMP-CAST: (err: FORG0001) xs: dateTime (fn: doc ($ uri)/descendant :: j: dikwmetadata/descendant :: j: timestamp) - Недопустимый листинг: xs: untypedAtomic («2014-02-03 21: 15: 35.036983»), отлитый как xs: dateTime в строке 17 expr: xs: dateTime (fn: doc ($ uri)/descendant :: j: dikwmetadata/descendant :: j: timestamp) '... поэтому я думаю, мне нужно сначала манипулировать документами, чтобы совместить строку timestamp? –
ah ok Я узнал, что эта метка времени была создана скриптом python для вставки документа ... так что другая метка времени в другом элементе доступна напрямую. необходимо изменить код python, чтобы он помещал временную метку в формат ML. спасибо! –