Marklogic服务器端Javascript:使用显式提交时的XDMP-CONFLICTINGUPDATES

时间:2017-11-27 09:37:05

标签: javascript marklogic sjs

我在Marklogic中遇到有冲突的更新问题。我知道原因,但我不知道如何解决它。 我有1个main( .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 个答案:

答案 0 :(得分:3)

这必须意味着你的file1位于'/ location / of / aCollectionName1 /'里面。请记住,当您调用xdmp.commit()时,MarkLogic不会立即提交。实际持久性始终推迟到所有代码执行完毕之后。因此,在一个请求中多次调用xdmp.commit()没有多大意义。在xdmp.commit()之后,您将无法阅读更新。

HTH!