Marklogic Java Client Api中的ApplyTransformListener.ApplyResult?

时间:2018-01-30 06:49:58

标签: marklogic java-api

似乎ApplyTransformListener方法withApplyResult有两个值(即REPLACEIGNORE),如documentation所述,定义就像这样Whether to REPLACE each document with the result of the transform, or run the transform with each document as input, but IGNORE the result.

我的代码,它实际上做的是它将从marklogic db获取内容并应用转换模块。我在下面提到ApplyTransformListener摘录:

 ServerTransform transform = new ServerTransform("rest");
            ApplyTransformListener transformListener = new ApplyTransformListener()
              .withTransform(transform)
              .withApplyResult(ApplyResult.REPLACE)

我的转换模块(即rest)就像这样

function patt(context, params, content)
{ 
  var transformed = {};
  transformed.Update= {"New" : "Element"};
  transformed.Original= content;
  xdmp.nodeReplace(content, transformed);
};
exports.transform = patt;

通过使用上面的代码,转换模块将获取内容并应用xdmp.nodeReplace(content, transformed)

我的问题:

即使我在这样的IGNORE中应用了applyresult

ServerTransform transform = new ServerTransform("rest");
                ApplyTransformListener transformListener = new ApplyTransformListener()
                  .withTransform(transform)
                  .withApplyResult(ApplyResult.IGNORE)

仍在应用Transform模块的更改。为什么?

必须IGNORE转换模块的结果是正确的(即文档中的原始数据不应该正确更改)?

如果我错了,请纠正我

由于

2 个答案:

答案 0 :(得分:1)

当您致电xdmp.nodeReplace时,您正在更改文档,我们不会阻止您这样做。 IGNORE选项用于这样的场景,您可以控制自己的修改,甚至可以控制其他文档。

使用REPLACE,您的转换函数将返回您要替换文档注​​释的新文档。请参阅此example from the guide

答案 1 :(得分:1)

IGNORE并不等同于干跑。相反,withApplyResult控制是否或MarkLogic自动用转换函数返回的内容替换原始内容,或者丢弃(忽略)转换函数返回的内容;您的转换函数应用于数据库的任何更改仍然是"坚持"当你使用IGNORE时。