gpt4 book ai didi

javascript - 将变量传递给 xdmp.eval()

转载 作者:行者123 更新时间:2023-11-29 19:18:42 28 4
gpt4 key购买 nike

我正在尝试将变量传递到 MarkLogic 8.0.4 xdmp.eval() 中,如下所示:

var spo = 'spo-role';
var spoRoleRes = xdmp.eval("var sec = require('/MarkLogic/security.xqy'); sec.createRole(role)",(role, spo),{"database" : xdmp.securityDatabase()})

但我不知道如何将变量传递给我想在安全数据库中运行的脚本。该文档似乎反射(reflect)了 XQY 文档,请参阅 xdmp.eval-docs

在变量下,文档讨论了 map:map() 对象,这些对象不是 js 而是 xqy 概念。 QName 也一样

我尝试了一个序列、一个 JSON 对象、几个版本的 clark 表示法,但不知道我应该在这里使用什么命名空间?

问题:如何将变量传递给 xdmp.eval()

最佳答案

在大多数需要在 xQuery 中使用 map 的地方,您可以在 javascript 中使用对象。尽管选项文档很愚蠢,因为它使用 XDMP 进行讨论,但实际的 API 参数定义表明它需要一个对象。

将对象作为第二个参数传递给 xdmp.eval 时,它会扩展它并在您评估的代码中为每个对象属性创建局部变量。

我提供了一个简单的概念证明来帮助您理解会发生什么:

var data = {
"foo": "bar",
"baz": "buz"
}

xdmp.eval(
"declareUpdate(); xdmp.documentInsert('/foo/' + baz + '.json', {'a':'aaa'} )",
data
)

结果是当前数据库中一个名为/foo/buz.json的文件

为什么?

  • 因为我传入了一个叫做数据的对象。
  • 这个对象有两个属性(foo 和 baz)
  • 这些变成了两个变量
    1. foo = bar
    2. baz = buz
  • 因此,"/foo/"+ baz + ".json"=/foo/buz.json

关于javascript - 将变量传递给 xdmp.eval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34074602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com