具有版本的文档的 XQuery 更新

XQuery update for document with versions

我正在尝试使用 XQuery 更新 xDB 中某些 属性 的值,这是我的事务:

let $source := doc('/historicalresource')/HistoricalResourceData[id/@UUID = '0361513e-30fa-45e4-a73a-d05870b8a284']

let $res := $source/ResourceProperty[@PropertyName="cpu|limit"]/@PropertyValue

let $change := '21572'

return replace value of node $res with $change

在 运行 这个查询之后我收到这样的错误:

com.xhive.error.XhiveException: VERSION_ACCESS_DENIED: This document is versioned and can only be changed through a versioning operation

确实在我的例子中 historicalresource 是一个可能包含多个文档的文件夹,并且所有文档都有一个版本,例如:v1.1、v1.2 等。

如何使用 xquery 更新上一版本的值? 我应该如何修改我的查询才能更新所需的值?

终于,我找到了问题的答案,因此将其添加到此处:

无法使用 xQuery 更新 xDB 文件,因为它是基于版本的系统并且 xQuery 无法创建新版本,但可以通过某些编码语言手动或自动完成(例如:java ):

  1. 手动 - 通过在 xDB 中编辑现有版本,在这种情况下,将在保存对文件现有版本的任何更改后自动创建新版本。
  2. 自动 - 通过签出文件、进行更改并将更改作为新版本提交。

对于版本化文档(在其上调用 XhiveLibraryChildIf.makeVersionable()),情况确实如此:您必须先签出文档,然后 运行 签出副本上的更新查询,最后签入新版本。但是,对于非版本化文档,您可以直接应用更新查询。