我想替换数据库中没有任何元数据(例如权限、属性或集合)的 xml 文档。托管文档 (dls) 不是一种选择。
使用 xdmp:document-insert()
不会保留权限、集合等
使用 xdmp:node-replace()
可以很好地处理文档的某些部分,但需要提前知道根节点。
是否有推荐的方法来更新 MarkLogic 中的整个文档?
最佳答案
您实际上并不需要知道根元素本身。如果您知道文档 URI,则可以执行以下操作:
xdmp:node-replace(fn:doc($uri)/*, $new-xml)
如果你有文档的任何节点,你也可以这样做:
xdmp:node-replace($node/fn:root(), $new-xml)
但是仅仅使用 xdmp:document-insert()
也没有那么困难:
xdmp:document-insert($uri, $new-xml, xdmp:document-get-permissions($uri), xdmp:document-get-collections($uri), xdmp:document-get-quality($uri))
注意:文档属性保存在文档插入处。另见:http://docs.marklogic.com/xdmp:document-insert
此外,这些方法之间没有太大的性能差异。在这方面最大的区别是 xdmp:node-replace()
需要来自原始文档的节点,这意味着必须首先从数据库中检索它。如果替换不依赖于原始文档,那么 xdmp:document-insert()
会最快。
HTH!
关于xquery - 在 marklogic 中更新整个文档的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100631/