Понимание границ транзакций на стороне сервера 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 () с прологом - что-то совершает транзакцию. то, как вы вызываете приведенный выше код, также влияет на это.

Пожалуйста, предоставьте полный пример, здесь нет "коммита", и вы не упоминаете, как вы вызывали приведенный выше код или что вы делали, чтобы "открыть новый сеанс".

Другие вопросы по тегам