【发布时间】:2020-12-07 21:02:16
【问题描述】:
我有一个简单的 1 节点 Marklogic 服务器,我需要每天清除文档。
下面的测试查询选择文档然后返回我想要执行以下操作的序列:
- 输出要解压的文件名
- 确保#1中文件的目录路径存在
- 将文档的压缩版本保存到 #1 中的文件中。
- 删除文档
这个结构安全吗?它为要删除的每个文档返回一个序列。返回序列中的最后一项删除文档。如果前面的任何步骤失败,文档是否仍会被删除?我应该相信引擎按给定的顺序执行返回序列吗?
xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
let $dateLimitAll := current-dateTime() -xs:dayTimeDuration("P1460D")
let $dateLimitSome := current-dateTime() -xs:dayTimeDuration("P730D")
for $adoc in doc()[1 to 5]
let $docDate := $adoc/Unit/created
let $uri := document-uri($adoc)
let $path:= fn:concat("d:/purge/" , $adoc/Unit/xmldatastore/state/data(), "/", fn:year-from-dateTime($docDate), "/", fn:month-from-dateTime($docDate))
let $filename := fn:concat($path, "/", $uri, ".zip")
where ( ($docDate < $dateLimitAll) or (($docDate < $dateLimitSome) and ($adoc/Unit/xmldatastore/state != "FIRMED") and ($adoc/Unit/xmldatastore/state != "SHIPPED")))
return ( $filename, xdmp:filesystem-directory-create($path, map:new(map:entry("createParents", fn:true()))), xdmp:save($filename, xdmp:zip-create(<parts xmlns="xdmp:zip"><part>{$uri}</part></parts>, doc($uri))), xdmp:document-delete($uri) )
附言请忽略 [1 到 5] 文档限制。添加用于测试。
【问题讨论】: