【问题标题】:Marklogic how to store xquery file into Modules databaseMarklogic如何将xquery文件存储到模块数据库中
【发布时间】:2018-11-18 16:52:06
【问题描述】:

我知道如何在 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))   

【问题讨论】:

    标签: marklogic


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      除了Mads回答:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-03
          • 1970-01-01
          • 1970-01-01
          • 2011-06-23
          • 2021-11-30
          • 1970-01-01
          • 2019-03-03
          • 2019-10-03
          相关资源
          最近更新 更多