关于使用 cts:search over 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 天的文档?