【问题标题】:how to insert node in JSON doc in Marklogic using xdmp:node-insert如何使用 xdmp:node-insert 在 Marklogic 的 JSON 文档中插入节点
【发布时间】:2020-11-09 21:21:36
【问题描述】:

我想像这样在 JSON 文档中插入节点:

{ "文件名": "l", "user_id": "测试", "requestId": "1232", “feedbackType”:“cpd_mah” }

运行此代码:

let $old := $doc/filename
return
  xdmp:node-insert-after($old, object-node{"isSaved": ""})

但这会引发错误XDMP-CHILDUNNAMED

【问题讨论】:

    标签: nosql marklogic marklogic-9


    【解决方案1】:

    我同意 Mads 的观点,即在 JSON 中使用 node-insert-child 更有意义。不过,您可以使用 node-insert-after 。您的尝试引发了XDMP-CHILDUNNAMED 错误,因为您传入了一个未命名的对象节点(它基本上是其属性的匿名包装器),而不是您要插入的命名属性。 Mads 代码提供了如何使其工作:

    let $old := doc("/test.json")/filename
    return
      xdmp:node-insert-after($old, object-node{"isSaved": ""}/isSaved)
    

    注意:如果您多次运行它,它将替换而不是插入,因为属性应该是唯一的。

    HTH!

    【讨论】:

      【解决方案2】:

      JSON 属性没有兄弟元素的概念,XML 元素的方式。

      JSON 对象基本上是具有一组属性的映射。因此,您希望插入 JSON 文档 object-node() 的子节点(注意 XPath 从构造的对象中选择 isSaved),而不是将对象作为子节点插入到属性之一之后。

      let $old := doc("/test.json")/object-node()
      return
        xdmp:node-insert-child($old, object-node{"isSaved": ""}/isSaved)
      

      MarkLogic 文档中的一些在 XQuery 中使用 JSON 的示例: https://docs.marklogic.com/guide/app-dev/json#id_60123

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多