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

Marklogic how to store xquery file into Modules database

我知道如何在 xml 文件中插入文档,但不知道如何将 xquery 文件存储到 Marklogic 模块数据库中。我想要存储 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))   

有多种方法可以将 xqy 文件插入模块数据库。这里只是一些:

  1. 在我看来,最佳做法是使用像 ml-gradle 这样的部署工具,这样您就可以轻松地将模块部署到多个环境并与其他开发人员共享您的部署设置。
  2. 您可以 运行 查询就像您在 QConsole 中显示的那样,但是 select Modules 数据库而不是数据库下拉列表中的 Content 数据库
  3. 您可以使用其他端点,例如 /v1/documents PUT 和 select 带有数据库参数的模块数据库。

除了Mads回答:

必须设置文档的执行权限,非管理员才能执行它。重要的是要记住,当 运行ning 在 marklogic 中(作为 xquery 或 javascript 或作为客户端 api 之一的结果)时——有多个数据库与您的会话相关联——数据、模块,安全等——所有 'data like' 操作都转到数据数据库,所有 'execute' 操作转到 'Modules' 数据库(或文件系统)等,因为没有 "database" xdmp:document-insert 的参数,并且数据库关联在单个表达式中不可更改——您使用 xdmp:eval / xdmp:invoke 函数之一来 运行 插入具有所需设置的子上下文。

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

MarkLogic 网站上也有一个方便的食谱。我经常使用它。它得到了很好的评论,并且有逻辑可以在没有提交的情况下先尝试它,以确保它正在做你期望的事情:

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