Marklogic如何将xquery文件存储到Modules数据库中

时间:2018-06-08 15:23:02

标签: marklogic

我知道如何在xml文件中插入文档但不知道如何将xquery文件存储到Marklogic Module数据库中。我想要存储xquery文件来设置计划任务的原因。我在下面有一个xquery文件。提前谢谢。

declare namespace...
let $uris := cts:element-value(...code...),
             cts:and-query((...code...))

let $result := {<stats><top-docs>
                  for $uri in $uris[1 to 10]
                       ...more code here..
               }</top-docs></stats>
let $permissions := (xdmp:permission(..give permissions here.))
let $_ := xdmp:log("Inserting Stats Document")
return xdmp:document-insert("/acitivity/stats.xml",$result, $permissions))   

3 个答案:

答案 0 :(得分:5)

有许多方法可以将xqy文件插入模块数据库。这里只是几个:

  1. 在我看来,最佳做法是使用ml-gradle之类的部署工具,以便您可以轻松地将模块部署到多个环境并与其他开发人员共享部署设置。
  2. 您可以像在QConsole中展示的那样运行查询,但选择 模块 数据库而不是 内容 数据库下拉列表中的数据库
  3. 您可以使用/v1/documents PUT等休止端点,并使用数据库参数选择模块数据库。

答案 1 :(得分:0)

除了Mads回答:

必须设置文档的执行权限,以便非管理员执行它。重要的是要记住,当在marklogic中运行时(作为xquery或javascript或作为客户端apis之一的结果) - 有多个与您的会话相关联的数据库 - 数据,模块,安全性等 - 所有&#39 ;数据如&#39;操作转到数据DB,所有&#39;执行&#39;操作转到&#39;模块&#39; DB(或文件系统)等,因为没有&#34;数据库&#34;参数到xdmp:document-insert,并且数据库关联在单个表达式中不可更改 - 您使用xdmp:eval / xdmp:invoke函数之一在具有所需设置的子上下文中运行插入。 / p>

示例:https://docs.marklogic.com/xdmp:invoke-function

答案 2 :(得分:0)

MarkLogic网站上还有一个方便的食谱。我经常使用它。它的评论很好并且有逻辑可以在没有提交的情况下尝试它,以确保它能够按照您的期望进行:

http://developer.marklogic.com/recipe/load-a-module