Javascript на стороне сервера Marklogic: XDMP-CONFLICTINGUPDATES при использовании явной фиксации

1

У меня были проблемы с конфликтующими обновлениями в Marklogic. Я знаю причину, но я не знаю, как это исправить. У меня есть 1 главный (.sjs) файл, который вызывает два разных файла (.sjs), которые обновляют набор документов. В основном файле я использую: declareUpdate({explicitCommit: true}); а затем в отдельных файлах я использую команду xdmp.commit(); после обновления документов. Тем не менее, я все еще получаю: XDMP-CONFLICTINGUPDATES.

Часть кода: Main.sjs:

function main(){
  declareUpdate({explicitCommit: true});
  function.to.file.1();
  function.to.file.2();
}

file1.sjs:

//make some docs and insert them into ML
function file1Function(){
    for (let d of someCollectionOfData) {
      xdmp.documentInsert('/a/uri/filexx.json', d, {collections: aCollectionName1});
    };
    xdmp.commit();
}

file2.sjs:

//adjust docs made in file1 and put them back into ML
funtion file2Function(){
  for (let d of xdmp.directory('/location/of/aCollectionName1/','infinity')) {
    let dObj = d.toObject();
    dObj.addSomething = 'something';
    xdmp.documentInsert(fn.documentUri(d), dObj, {collections: aCollectionName1});
  }
  xdmp.commit();
}
Теги:
marklogic
sjs

1 ответ

3
Лучший ответ

Это должно означать, что ваш файл1 находится внутри '/location/of/aCollectionName1/'. Имейте в виду, что MarkLogic не фиксирует немедленно, когда вы вызываете xdmp.commit(). Фактическое сохранение всегда откладывается до тех пор, пока не выполнится весь код. Для этого не имеет смысла ссылаться на xdmp.commit() более одного раза в одном запросе. Вы не сможете читать свои обновления после xdmp.commit().

НТН!

  • 0
    Итак, как я могу за одну процедуру отредактировать документ несколько раз? Имейте в виду, что эти изменения могут зависеть друг от друга и выполняться динамически. Вот почему я хочу сделать их за одну процедуру.
  • 1
    Вам нужно будет обновить копию содержимого в памяти несколько раз, пока вы не закончите, и только затем сохранить результат. Эта библиотека может помочь вам в этом: github.com/ryanjdew/XQuery-XML-Memory-Operations
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню