0

我想在 MarkLogic 中检查服务器端 JavaScript 中的事务边界。

所以我写了下面的代码。我只想/docs/first.json在此事务中查看文档“”。基本上,我希望服务器端 JavasSript 中的每个语句都能看到事务中其他语句的更新,并且它不应该在事务之外可见。但是当我运行下面的代码时,我得到了文档“ /docs/first.json”,它是 的结果fn.doc("/docs/first.json"),它在同一个事务中运行。但是当我打开一个新会话并尝试获取文档“ /docs/first.json”时,我了解到该文档实际上已被摄取到数据库中,因此它在事务之外也是可见的。

有人可以纠正我在此代码中出错的地方,以便我只能在交易中而不是在交易之外查看文档。我能够使用 Xquery 使用“ ;”作为语句分隔符来实现这一点。

declareUpdate({explicitCommit: true});
xdmp.eval('declareUpdate(); xdmp.documentInsert("/docs/first.json",{"first": 1});',{commit:'explicit',transactionMode:'update'})
xdmp.eval('fn.doc("/docs/first.json")',{transactionMode:"query"})
4

1 回答 1

1

我认为问题在于显式的“declareUpdate()”覆盖了强制它自动提交的 xdmp.eval 选项。此外,您将 deprecated 与非 deprecated 选项混合在一起。不要将 xdmp.eval() 选项与序言混合 - 某些东西正在提交事务。您调用上述代码的方式也会影响到这一点。

请提供一个完整的示例,这显示没有“提交”,并且您没有提及您如何调用上述代码或您为“打开一个新会话”做了什么。

于 2018-11-10T05:15:58.340 回答