在marklogic中更新整个文档的最佳方法

chr*_*lly 3 xquery marklogic nosql

我想在没有任何元数据(例如权限,属性或集合)的数据库中替换xml文档.托管文档(dls)不是一种选择.

使用xdmp:document-insert()不保留权限,集合等.

使用xdmp:node-replace()适用于文档的某些部分,但需要提前知道根节点.

是否有推荐的方法来更新MarkLogic中的整个文档?

grt*_*tjn 8

您根本不需要知道根元素本身.如果您知道文档URI,则可以执行以下操作:

xdmp:node-replace(fn:doc($uri)/*, $new-xml)
Run Code Online (Sandbox Code Playgroud)

如果您有文档的任何节点,您还可以执行以下操作:

xdmp:node-replace($node/fn:root(), $new-xml)
Run Code Online (Sandbox Code Playgroud)

但只是使用xdmp:document-insert()也不是那么困难:

xdmp:document-insert($uri, $new-xml, xdmp:document-get-permissions($uri), xdmp:document-get-collections($uri), xdmp:document-get-quality($uri))
Run Code Online (Sandbox Code Playgroud)

注意:document-properties保留在document-insert中.另见:http://docs.marklogic.com/xdmp:document--插入

此外,这些方法之间没有太大的性能差异.在这方面最大的不同是xdmp:node-replace()需要原始文档中的节点,这意味着必须首先从数据库中检索它.如果替换不依赖于原始文档,那么xdmp:document-insert()将是最快的.

HTH!