我想在 marklogic 中用服务器端 JavaScript 编写一个多语句事务。我想要实现的是,做一个更新事务,然后编写一个查询语句来查询更新的文档并确认更新在事务中可见,最后进行回滚。通过回滚,我想确认在事务中进行的更新在事务外部不可见,而在事务中可见。我在 Xquery 和服务器端 JavaScript 中都编写了代码,以便使用 xdmp:eval/xdmp.eval 来实现这一点。我能够使用 Xquery 成功实现它,但不能在服务器端 Javascript 中实现。
以下是我的 Xquery 代码:
xquery version "1.0-ml";
declare option xdmp:transaction-mode "update";
let $query :=
'xquery version "1.0-ml";
xdmp:document-insert("/docs/first.json", <myData/>)
'
return xdmp:eval(
$query, (),
<options xmlns="xdmp:eval">
<isolation>same-statement</isolation>
</options>);
if (fn:doc("/docs/first.json"))
then ("VISIBLE")
else ("NOT VISIBLE");
xdmp:rollback()
下面是我的服务器端 JavaScript 代码:
declareUpdate();
var query = 'declareUpdate(); xdmp.documentInsert("/docs/first.json",{"first": 1}); '
xdmp.eval(query,null,{isolation:'same-statement'})
fn.doc("/docs/first.json")
if (fn.doc("/docs/first.json"))
var result = ("visible")
else var result = ("not visible");
xdmp.rollback()
result
我正在通过查询控制台执行这两个代码。我希望在这两种情况下都能看到“可见”的结果。但是在运行服务器端 JavaScript 代码时,它向我抛出了错误:[javascript] TypeError: Cannot read property 'result' of null due to xdmp.rollback 并且无法看到变量 'result' 中的值
有人可以纠正我的服务器端 javascript 代码中出了什么问题吗?