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

标签 xquery marklogic nosql

我想替换数据库中没有任何元数据(例如权限、属性或集合)的 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/

相关文章:

xml - 多个重复字段上的 MarkLogic TDE xpath

rdbms - 非规范化如何成为 NoSQL DB 的属性

xquery 获取奇/偶节点结果

javascript - 带有 XQIB 的 REST 调用报告功能发送请求不可用

string - Xquery ( XDMP-ARGTYPE error ) 函数输入的预期类型与实际类型不同

marklogic - 计算数据库目录中的文档数

mongodb - 用于博客/内容管理系统的 NoSQL 数据库? (MongoDB/ Cassandra )

sockets - 横向扩展套接字服务器

xml - 如何计算 XQuery 中不同值的每个实例?

xquery - 在 XQuery 中解析日期数组(MarkLogic v8 风格)