我的印象是MarkLogic中的XQuery和服务器端JavaScript API在很大程度上是等效的。但是cts:search
vs 似乎有很大的不同cts.search
。在中cts:search
,我可以指定要搜索和返回的元素。例如,我可以从食谱书中使用肉桂粉作为成分来检索所有食谱:
cts:search(//recipe, cts:element-word-query(xs:QName('ingredients'), 'cinnamon'))
Run Code Online (Sandbox Code Playgroud)
虽然cts.search
不接受一个路径表达式,并返回整个食谱书的文件:
cts.search(cts.elementWordQuery(xs.QName('ingredients'), 'cinnamon'))
Run Code Online (Sandbox Code Playgroud)
MarkLogic邮件列表中曾问过同样的问题,但我在那儿看不到答案:https : //developer.marklogic.com/pipermail/general/2015-March/016508.html
下面是一个最小的示例:
<book>
<recipe>
<ingredients>cinnamon, peppermint</ingredients>
<instruction/>
</recipe>
<recipe>
<ingredients>sugar, peppermint</ingredients>
<instruction/>
</recipe>
<recipe>
<ingredients>coconut oil</ingredients>
<instruction/>
</recipe>
</book>
Run Code Online (Sandbox Code Playgroud)
xquery将是:
cts:search(//recipe, cts:element-word-query(xs:QName('ingredients'), 'cinnamon'))
Run Code Online (Sandbox Code Playgroud)
和响应:
<recipe>
<ingredients>cinnamon, peppermint</ingredients>
<instruction></instruction>
</recipe>
Run Code Online (Sandbox Code Playgroud) MarkLogic PATCH API 使用的JSON 补丁规范与 JSON-Path 标准 ( RFC 6902 )非常相似,但并不完全相同。例如,将节点添加到以下文档:
{
"parent": {
"child1": "c1-value",
"child2": "c2-value"
}
}
Run Code Online (Sandbox Code Playgroud)
MarkLogic 补丁:
{
"insert": {
"context": "/parent",
"position": "last-child",
"content": { "child3": "c3-value" }
}
}
Run Code Online (Sandbox Code Playgroud)
JSON-Patch 标准:
{
"op": "add",
"path": "/parent/child3",
"value": "c3-value"
}
Run Code Online (Sandbox Code Playgroud)
有没有办法自动将 JSON-Patch 翻译成 MarkLogic Patch?我的想法是利用诸如json-patch-gen
自动生成 JSON-Patch 操作并将它们转换为 MarkLogic Patch 之类的库来更新 MarkLogic 中的文档。
或者,是否有一个 JavaScript 库可用于通过区分两个 JavaScript 对象来自动生成 MarkLogic 补丁?
我觉得我一定错过了一些东西,但我就是不知道如何使用 XQuery 在 MarkLogic 中创建 UTC 时间戳。该fn:current-dateTime
函数使用操作系统指定的时区偏移量创建时间戳。
使用服务器端 JavaScript 这很简单:
new Date().toISOString()
// 2020-02-07T14:43:32.588Z
Run Code Online (Sandbox Code Playgroud)
谢谢你!
MarkLogic v10 引入了对原生 JavaScript 模块(ECMAScript 模块)的支持。
https://docs.marklogic.com/guide/jsref/modules
但是我不确定如何在资源扩展中导入这些模块。例如:
'use strict';
import * as jsearch = from '/MarkLogic/jsearch.mjs';
function get(context, params) {
// omitted
};
exports.GET = get;
Run Code Online (Sandbox Code Playgroud)
会导致以下错误:
JS-JAVASCRIPT: import * as jsearch = from '/MarkLogic/jsearch.mjs'; -- 运行 JavaScript 请求时出错:SyntaxError: Unexpected token *;
同样,导入自定义模块如import { foo } from '/bar.mjs'
导致类似的错误:Unexpected token {
.
谢谢!