我有一个使用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我可以看到日志中的值正在被替换,但它没有反映到数据库中。我应该如何在我的数据库中提交/保存这个节点替换?
有什么建议吗?
发布于 2018-07-19 23:35:07
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)发布于 2018-07-19 23:37:09
如果需要更新节点,我会使用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")https://stackoverflow.com/questions/51426469
复制相似问题