Я хотел проверить границы транзакций в серверном JavaScript в MarkLogic.
Итак, я написал следующий код. Я хотел видеть документ "/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"})