У меня были проблемы с конфликтующими обновлениями в 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();
}
Это должно означать, что ваш файл1 находится внутри '/location/of/aCollectionName1/'. Имейте в виду, что MarkLogic не фиксирует немедленно, когда вы вызываете xdmp.commit(). Фактическое сохранение всегда откладывается до тех пор, пока не выполнится весь код. Для этого не имеет смысла ссылаться на xdmp.commit() более одного раза в одном запросе. Вы не сможете читать свои обновления после xdmp.commit().
НТН!