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

ディレクトリを削除してそこで停止するだけです。MarkLogic を使用すると、ディレクトリが示す意味で存在する必要はほとんどありませんxdmp:directory-create

詳細については、 http://blakeley.com/blogofile/2012/03/19/directory-assistance/を参照してください。

于 2012-11-29T03:45:52.787 に答える
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 でコマンドの 1 つを実行して他のコマンドを呼び出すと、デッドロックが発生するため機能しません。

この答えがありますが、ディレクトリの内容を誰かが持っている場合は削除するソリューションにまだ興味があります。

于 2012-11-28T22:37:12.863 に答える