Xquery Marklogic如何更改目录名

Xquery Marklogic如何更改目录名,xquery,marklogic,Xquery,Marklogic,如何在Marklogic中将目录从“/Collections/”更新为“/CollectionsCount/” for $each in xdmp:directory("/collections/", "infinity") return xdmp:node-uri($each) result found: /collections/Count2017-08-25.xml /collections/Count2017-08-27.xml /collections/Count2017-08

如何在Marklogic中将目录从“/Collections/”更新为“/CollectionsCount/”

for $each in xdmp:directory("/collections/", "infinity")
return xdmp:node-uri($each)

result found:
 /collections/Count2017-08-25.xml
 /collections/Count2017-08-27.xml
 /collections/Count2017-08-26.xml
 /collections/Count2017-08-28.xml
我想将目录更新为“/collectionsCount/”我使用什么函数。提前谢谢

 /collectionsCount/Count2017-08-25.xml
/collectionsCount/Count2017-08-26.xml
....

目录是基于文档URI的构造,因此为了更改目录,您需要删除旧文档并在新URI处插入新文档(使用新目录前缀代替旧文档)


编辑:更新以包含@hunterhacker关于传播文档元数据的建议。请注意,我故意忽略了将新文档分配给旧文档的林,因为在大多数情况下,我认为最好由数据库决定。

ML9中的新DMSDK有一种简单的方法来确保这样的操作可以扩展,因为一旦您达到数千个URI,操作可能会在qconsole中超时。有关如何在Gradle中轻松使用DMSDK的示例,请参见。生产代码还应复制元数据,如集合、安全性、文档质量、属性等。
for $each in xdmp:directory("/collections/", "infinity")
let $old-uri := $each/xdmp:node-uri(.)
let $permissions := xdmp:document-get-permissions($old-uri)
let $collections := xdmp:document-get-collections($old-uri)
let $quality := xdmp:document-get-quality($old-uri)
let $properties := xdmp:document-properties($old-uri)
let $new-uri := concat('/collectionsCount/', substring-after($old-uri, '/collections/'))
return (
  xdmp:document-insert($new-uri, $each, $permissions, $collections, $quality),
  xdmp:document-set-properties($new-uri, $properties),
  xdmp:document-delete($old-uri))