javascript - Marklogic 9 中奇怪的 xdmp.eval() toObject() 问题

标签 javascript marklogic

所以我有以下问题,我需要更新 JSON 文档中的数组。它是一个捕获项目设置的文档,项目成员可以读取项目文档,但不能更新它。

我需要首先读取文档,但这是一个不同的事务,提取 members 数组并继续。

现在我从xdmp.eval()返回的JSON对象找不到数组,直接从cts.doc()返回的JSON对象确实...... .?

位于 uri '/projects/12345.json' 的示例项目文档:

{
"name": "project01",
"description": "example project", 
"id": "12345", 
"members": [
{
"name": "user01", 
"role": "owner", 
"uid": "234"
}, 
{
"name": "user02", 
"role": "member", 
"uid": "123"
}
] 
}

我的 JavaScript 查询:

var pid = 12345;
// uri to project doc
var pUri = '/projects/' + pid + '.json'

// alternative to not lock project doc
var options = {
             "isolation" : "different-transaction"
              }

//var prjObj = xdmp.eval('cts.doc("' + pUri + '")',null,options).toObject()[0]
//var prjObj = xdmp.eval('cts.doc("' + pUri + '").toObject()',null,options)
var prjObj = cts.doc(pUri).toObject()

prjObj.members

按预期返回成员数组,但是

// cast eval result to object
var prjObj = xdmp.eval('cts.doc("' + pUri + '")',null,options).toObject()[0]
// cast doc to object inside eval
var prjObj = xdmp.eval('cts.doc("' + pUri + '").toObject()',null,options);
// end code

但是返回的对象找不到成员数组...

现在怎么办?

最佳答案

xdmp.eval() 返回 1 个 document-node() 对象的序列。

当您对该序列调用 .toObject() 时,它会转换为一个包含一个 document-node() 的数组,然后是 [0] 正在选择 document-node()

然后您可以使用 .toObject() 将文档节点转换为 JavaScript 对象:

var prjObj = xdmp.eval('cts.doc("' + pUri + '")',null,options).toObject()[0].toObject()

或者,您可以使用 fn.head() 从结果序列中选择第一项,然后将该 document-node() 转换为 JavaScript 对象

var prjObj = fn.head(xdmp.eval('cts.doc("' + pUri + '")',null,options)).toObject()

然后您可以使用prjObj.members来寻址成员数组。

关于javascript - Marklogic 9 中奇怪的 xdmp.eval() toObject() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280777/

相关文章:

javascript - 如何在 typescript 声明文件中定义单例 javascript 类

javascript - 在 JavaScript 中为列表创建了一个删除函数,但它没有删除元素

javascript - 将使用 nvm 在项目上设置默认 Node 版本的点文件?

马克逻辑 8 : delete in bulk

Marklogic如何循环每个节点

xpath - Xquery返回 map 列表而不是 map

javascript - 使用url hash执行点击事件

javascript - 序列化 HTMLDocument 然后在服务器中渲染它?

XSLT - 使用复制命名空间时,未引用的命名空间仍会传播 ="no"

marklogic - 下载文件,文件名