Transactions 理解服务器端JavaScript-Marklogic中的事务边界

Transactions 理解服务器端JavaScript-Marklogic中的事务边界,transactions,marklogic,serverside-javascript,sjs,Transactions,Marklogic,Serverside Javascript,Sjs,我想在MarkLogic中检查服务器端JavaScript中的事务边界 所以我写了下面的代码。我只想在这个事务中看到文档“/docs/first.json”。基本上,我希望服务器端JavasSript中的每个语句都能看到事务中其他语句的更新,并且在事务外部不应该可见。但是当我运行下面的代码时,我得到了文档“/docs/first.json”,它是在同一事务中运行的fn.doc(“/docs/first.json”)的结果。但是,当我打开一个新会话并尝试获取文档“/docs/first.json”

我想在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"})

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


请提供一个完整的示例,这没有显示“提交”,您也没有提到如何调用上述代码或如何“打开新会话”。

如果我没有在eval函数中提供declareUpdate(),它会给我以下错误:[javascript]JS-declareUpdate:xdmp.documentInsert(/docs/first.json),ObjectNode({“first”:1}))--JavaScript更新必须以declareUpdate()开头。上面的问题有我从查询控制台运行的完整代码。我不会从任何其他地方调用此代码。为了“打开新会话”或事务,我打开了另一个查询控制台选项卡,并使用fn.doc函数检查了文档“/docs/first.json”。但是我想要实现的是eval函数,而不是自动提交eval代码,它应该被视为调用事务的另一个语句,这样,如果事务是回滚的,文档将在调用事务中可见,而不是在调用事务之外的任何地方