0

MarkLogic 版本:9.0-6.2

我们数据库中的所有文档都是 JSON,我们使用 Javascript 来操作数据。我正在尝试创建一个管道,用于识别何时更新 JSON 文档中的电话号码(使用条件模块),然后运行操作模块。到目前为止,我得到了以下代码。

{
  "pipeline-name": "CPF async Test",
  "pipeline-description": "CPF Test",
  "success-action": {
      "module": "/MarkLogic/cpf/actions/success-action.xqy"
  },
  "failure-action": {
      "module": "/marklogic/cpf/actions/failure-action.xqy"
  },
  "status-transition": [
    {
      "annotation": "",
      "status": "updated",
      "on-success": "http://marklogic.com/states/done",
      "on-failure": "http://marklogic.com/states/error",
      "execute": [
         {
           "condition": {
           "module": ???
           },
           "action": {
           "module": "sleepTest.sjs"
          }
        }
     ]
   }
 ]
}
  1. 当我尝试使用管理控制台(过滤器为 filename.json)将此 JSON 作为管道加载时,我收到一条消息“无效输入:找不到可读的 XML 文件:”

    管道是否应该始终是 XML?

  2. 我能够(在 JavaScript 中)编写并成功执行操作模块。我在 XML 管道中对其进行了测试。我也可以用 JavaScript 编写条件模块吗?

  3. 我不确定 MarkLogic 是否提供了一个内置条件模块来识别属性的更改(通过将属性作为参数传递给条件模块)。如果是,您能否指出文档?如果我必须创建自定义条件模块,如何将新旧电话号码传递给模块?条件模块会是什么样子,最好是在 JavaScript 中?

我在 CPF 上找到的大多数文档都是 XML/XQuery。任何指向 JSON/JavaScript CPF 文档的指针都值得赞赏。

提前致谢!

4

2 回答 2

0

管道可以是 XML 或 JSON - 这个 ml-gradle 示例项目中有一些示例 - https://github.com/marklogic-community/ml-gradle/tree/master/examples/cpf-project/src/main/毫升配置/cpf/管道

我认为条件模块可以是 JS 或 XQuery。

至于检测更改 - CPF 通过提交后触发器运行,因此在条件或操作模块运行时文档已经更新。因此,您需要将旧值存储在文档的某个位置。这与 MarkLogic 相切,但这里的一种方法是使用 JSON Patch 规范,以便客户端通过补丁指定更改。您可以将补丁保存为单独的文档(或作为电话号码文档的一部分)并更新电话号码文档。然后,条件/操作模块可以查看最新的补丁以查看进行了哪些更改。

于 2019-01-10T22:50:35.730 回答
0

@rjrudin指出的示例在 XQuery 中只有 CPF 条件模块。下面是 XQuery 和服务器端 JavaScript 版本的比较(省略了日志记录):

sample-condition.xqy 链接到 GitHub 上的原始文件

xquery version "1.0-ml";
declare namespace cpf = "http://marklogic.com/cpf";
declare variable $cpf:document-uri as xs:string external;
(: your custom condition logic :)
return true()  (: or false() :)

样本条件.sjs

'use strict'
const cpf = require('/MarkLogic/cpf/cpf')
// your custom condition logic
fn.true()  // or fn.false()

文档:https ://docs.marklogic.com/js/cpf

于 2019-03-03T17:23:12.063 回答