2017-08-28 63 views
2

如何更新從目錄「/收藏/」到「/ CollectionsCount /」在MarklogicMarklogic如何更改目錄名

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 
.... 

回答

4

目錄是基於文檔的URI的構建,所以爲了改變目錄,你將需要刪除舊文件和地方的插入,在新的URI新的(使用新的目錄前綴舊的)。

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)) 

編輯:更新以包括@ hunterhacker的建議來傳播文件的元數據。請注意,我故意將新文檔分配給舊文檔的林,因爲在大多數情況下,我認爲讓數據庫決定更好。

+0

ML9中的新DMSDK有一個簡單的方法來確保這樣的操作可以擴展,因爲一旦你點擊了數以千計的URI,操作可能會在qconsole中超時。有關如何在Gradle中輕鬆使用DMSDK的示例,請參閱https://github.com/marklogic-community/ml-gradle/wiki/DMSDK-Tasks。 – rjrudin

+3

生產代碼還應該複製元數據,如集合,安全性,文檔質量,屬性等。 – hunterhacker