0

我想在不删除目录本身的情况下清空 MarkLogic 中的目录 ($directory) 的内容。使用 XQUERY 我尝试了以下方法:

let $_ := xdmp:directory-delete( $directory )
return xdmp:directory-create( $directory )

并作为一系列操作:

(xdmp:directory-delete( $directory ), xdmp:directory-create( $directory ))

我收到错误“目录已存在”。

我可以尝试遍历目录中的每个文件并删除它们,但这会留下目录本身。我想完全清除目录的所有内容。有任何想法吗?

4

2 回答 2

0

我发现您必须使用 xdmp:eval() 函数在不同的事务中运行这些命令中的每一个。执行以下操作将起作用。

let $deleteCommand := "declare variable $directory as xs:string external; xdmp:directory-delete($directory)"
let $createCommand := "declare variable $directory as xs:string external; xdmp:directory-create($directory)"
let $_ := xdmp:eval($deleteCommand, (xs:QName("directory"), $directory),<options xmlns="xdmp:eval"><isolation>different-transaction</isolation><prevent-deadlocks>false</prevent-deadlocks></options>)
let $_ := xdmp:eval($createCommand, (xs:QName("directory"), $directory),<options xmlns="xdmp:eval"><isolation>different-transaction</isolation><prevent-deadlocks>false</prevent-deadlocks></options>)
return $_

在 eval 中运行其中一个命令并调用另一个命令不起作用,因为这会产生死锁。

尽管有这个答案,但我仍然对删除目录内容(如果有人有的话)的解决方案感兴趣。

于 2012-11-28T22:37:12.863 回答
0

我会简单地删除目录并停在那里。使用 MarkLogic,您几乎不需要在xdmp:directory-create表示的意义上存在目录。

有关更长的故事,请参阅http://blakeley.com/blogofile/2012/03/19/directory-assistance/

于 2012-11-29T03:45:52.787 回答