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"
}
}
]
}
]
}
当我尝试使用管理控制台(以filter.filename.json作为过滤器)将此JSON加载为管道时,我收到一条消息“输入无效:找不到可读的XML文件:”
管道应始终为XML吗?
我能够编写(使用JavaScript)并成功执行操作模块。我在XML管道中对其进行了测试。我也可以用JavaScript编写条件模块吗?
我不确定MarkLogic是否提供了内置条件模块来标识对属性的更改(通过将属性作为参数传递给条件模块)。如果是,请您指向文档?如果必须创建自定义条件模块,如何将新旧电话号码传递给该模块?条件模块的外观如何(最好在JavaScript中)?
我在CPF上发现的大多数文档都是XML / XQuery。感谢所有指向JSON / JavaScript CPF文档的指针。
谢谢!
答案 0 :(得分:0)
管道可以是XML或JSON-此ml-gradle示例项目中有一些示例-https://github.com/marklogic-community/ml-gradle/tree/master/examples/cpf-project/src/main/ml-config/cpf/pipelines。
我认为条件模块可以是JS或XQuery。
关于检测更改-CPF通过提交后触发器运行,因此,在条件或操作模块运行时,文档将已经更新。因此,您需要将旧值存储在文档中的某个位置。这与MarkLogic是相切的,但是这里的一种方法是使用JSON补丁规范,以便客户端通过补丁指定更改。您可以将修补程序都保留为单独的文档(或作为电话号码文档的一部分)并更新电话号码文档。然后,条件/操作模块可以查看最新的补丁程序以查看进行了哪些更改。
答案 1 :(得分:0)
@rjrudin指出的示例在XQuery中仅具有CPF条件模块。下面是XQuery和服务器端JavaScript版本的比较(省略了日志记录):
sample-condition.xqy link to the original on 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() :)
sample-condition.sjs
'use strict'
const cpf = require('/MarkLogic/cpf/cpf')
// your custom condition logic
fn.true() // or fn.false()