我正在尝试将变量传递到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()})
但我不知道如何将变量传递给我想在securty数据库中运行的脚本。 文档似乎反映了XQY文档,请参阅xdmp.eval-docs
在变量下,文档讨论的是map:map()
对象,这些对象不是js而是xqy概念。与QName相同
我尝试了一个序列,一个JSON对象,几个版本的clark表示法但不知道我应该在这里使用哪个命名空间?
问题:如何将变量传递给xdmp.eval()
?
答案 0 :(得分:3)
在大多数要在xQuery中使用地图的地方,您可以在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的文档
为什么?