我在使用mem:node-replace()
的地方有一个代码。代码如下-
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
我可以看到该值在LOG中被替换了,但是没有反映到数据库中。 我应该如何在数据库中提交/保存该节点替换?
有什么建议吗?
答案 0 :(得分:6)
mem:replace
函数仅更新内存中的节点。您已经创建了该文档的内存副本并对其进行了更改,但未在数据库中传播这些更改。这类似于更新按值而不是指针传递的变量。
在进行内存中更新之后,您需要将更新后的文档重新插入数据库中。
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)
答案 1 :(得分:4)
如果您需要更新节点,我将使用xdmp:node-replace
来替换磁盘上的节点。
这是文档中的一个示例: https://docs.marklogic.com/xdmp:node-replace
(: 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")