2016-11-24 67 views
1

我使用roxy設置數據庫,它與「documents」數據庫不同。我想插入一個配置文件到該數據庫中。將文檔插入特定數據庫MarkLogic

我有XQuery中該功能毫升-1.0

xquery version "1.0-ml"; 



declare namespace appsetup = "http://kittens.com.au/appsetup"; 



declare function appsetup:setup-day0($root,$content-db){ 
    (: some values :) 
    let $m := map:new() 
    let $_ := map:put ($m, "Kittens-Forever",xdmp:parse-dateTime("[Y0001]-[M01]-[D01]", "2999-12-31")) 
    let $_ := map:put ($m, "Kittens-Never", xdmp:parse-dateTime("[Y0001]-[M01]-[D01]", "1899-12-31")) 
    let $_ := map:put ($m, "Kittens-Load-Root", $root) 

    return xdmp:document-insert ("/ksys/smap", <s:map>{$m}</s:map>, 
        (xdmp:permission ("Kittens-role", "read"), 
        xdmp:permission ("Kittens-role", "update"))) 

}; 

xdmp:document-insert插入文檔中的默認的「文檔」的數據庫。我看了一下,我找不到一種方法來說這個文件加載到這個數據庫。我只找到一種方法將文檔插入到具有xdmp:document-load(https://docs.marklogic.com/xdmp:document-load)的特定林中。

有沒有辦法讓我把這個東西加載到這個數據庫中,最好只是作爲一個xquery參數?

回答

2

xdmp:默認情況下文檔插入不會插入到Documents數據庫中。它插入到應用程序服務器配置中定義的數據庫中。這個想法是,你有一個你用來與數據庫接口的應用服務器。

一些注意事項:

  • 使用配置爲你的數據庫應用程序服務器。
  • 或者使用REST API,其具有用於該
  • 的參數或者使用HTTP重寫規則來基於用戶動態地更改數據庫,URI或查詢參數
  • 或者使用xdmp:EVAL或它的衍生物(產卵, invoke,invoke-function),它們都有一個選項來定義使用哪個數據庫。

對於您的特定示例,我建議您使用xdmp:invoke-function。

+0

我喜歡invoke-function(https://docs.marklogic.com/xdmp:invoke-function)。 –

+0

這可能有助於: http://www.xqueryhacker.com/2014/05/01/applying-a-function-in-the-context-of-a-different-database-updated-for-marklogic-7。 html –

+0

關於您的鏈接的一個注意事項 - MarkLogic的官方文檔每次發佈都會更新。在ML8中,有一種新的事務模式:update-auto-commit在7中不可用。在很多情況下,它是非常有價值的,因爲如果與isolation = different-transaction一起使用,則插入的文檔可用於原始調用代碼。 –