具有版本的文档的 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 ):
- 手动 - 通过在 xDB 中编辑现有版本,在这种情况下,将在保存对文件现有版本的任何更改后自动创建新版本。
- 自动 - 通过签出文件、进行更改并将更改作为新版本提交。
对于版本化文档(在其上调用 XhiveLibraryChildIf.makeVersionable()
),情况确实如此:您必须先签出文档,然后 运行 签出副本上的更新查询,最后签入新版本。但是,对于非版本化文档,您可以直接应用更新查询。
我正在尝试使用 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 ):
- 手动 - 通过在 xDB 中编辑现有版本,在这种情况下,将在保存对文件现有版本的任何更改后自动创建新版本。
- 自动 - 通过签出文件、进行更改并将更改作为新版本提交。
对于版本化文档(在其上调用 XhiveLibraryChildIf.makeVersionable()
),情况确实如此:您必须先签出文档,然后 运行 签出副本上的更新查询,最后签入新版本。但是,对于非版本化文档,您可以直接应用更新查询。