首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mem:node-replace将内容提交到数据库?

如何使用mem:node-replace将内容提交到数据库?
EN

Stack Overflow用户
提问于 2018-07-19 23:24:14
回答 2查看 83关注 0票数 0

我有一个使用mem:node-replace()的代码。代码如下:

代码语言:javascript
复制
let $a := 
  for $i in $res
  let $uri := fn:base-uri($i)
  let $doc := fn:doc($uri)
  return if(fn:exists($doc) eq fn:true()) 
    then (
      (
        mem:node-replace($doc//*:NODE1,<NODE1>{doc($id)//*:NODE1}</NODE1>),
        mem:node-replace($doc//*:NODE2,<NODE2>{$curr_date}</NODE2>)
      ) 
    ) 
    else () 
return $a

我可以看到日志中的值正在被替换,但它没有反映到数据库中。我应该如何在我的数据库中提交/保存这个节点替换?

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2018-07-19 23:35:07

mem:replace函数仅更新内存中的节点。您已经创建了文档的内存副本并对其进行了更改,但没有在数据库中传播这些更改。这类似于更新通过值而不是指针传递的变量。

在内存更新之后,需要将更新后的文档重新插入到数据库中。

代码语言:javascript
复制
let $a := for $i in $res
let $uri := fn:base-uri($i)
let $doc := fn:doc($uri)
let $_update := 
  if (fn:exists($doc) eq fn:true())
  then (mem:node-replace($doc//*:NODE1, <NODE1>{doc($id)//*:NODE1}</NODE1>), 
    mem:node-replace($doc//*:NODE2, <NODE2>{$curr_date}</NODE2>))    
  else ()
return xdmp:document-insert($uri, $doc)
票数 6
EN

Stack Overflow用户

发布于 2018-07-19 23:37:09

如果需要更新节点,我会使用xdmp:node-replace,它会替换磁盘上的节点。

下面是文档中的一个示例:https://docs.marklogic.com/xdmp:node-replace

代码语言:javascript
复制
(: create an XML document :)
xdmp:document-insert("/example.xml",
    <a><b>bbb</b></a>);

(: replace the b node with a c node :)
xdmp:node-replace(doc("/example.xml")/a/b, <c>ccc</c>);

(: look at the new document :)
fn:doc("/example.xml")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51426469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档