Понимание границ транзакций на стороне сервера JavaScript- Marklogic
Я хотел проверить границы транзакций в серверном 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"})
1 ответ
Я полагаю, что проблема заключается в том, что явная переменная "кипрская декларация" переопределяет параметры xdmp.eval, что приводит к автоматической фиксации. Кроме того, вы смешиваете неценные варианты. Не смешивайте параметры xdmp.eval () с прологом - что-то совершает транзакцию. то, как вы вызываете приведенный выше код, также влияет на это.
Пожалуйста, предоставьте полный пример, здесь нет "коммита", и вы не упоминаете, как вы вызывали приведенный выше код или что вы делали, чтобы "открыть новый сеанс".