似乎ApplyTransformListener方法withApplyResult
有两个值(即REPLACE
和IGNORE
),如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转换模块的结果是正确的(即文档中的原始数据不应该正确更改)?
如果我错了,请纠正我
由于
答案 0 :(得分:1)
当您致电xdmp.nodeReplace
时,您正在更改文档,我们不会阻止您这样做。 IGNORE
选项用于这样的场景,您可以控制自己的修改,甚至可以控制其他文档。
使用REPLACE
,您的转换函数将返回您要替换文档注释的新文档。请参阅此example from the guide。
答案 1 :(得分:1)
IGNORE并不等同于干跑。相反,withApplyResult
控制是否或MarkLogic自动用转换函数返回的内容替换原始内容,或者丢弃(忽略)转换函数返回的内容;您的转换函数应用于数据库的任何更改仍然是"坚持"当你使用IGNORE时。