PDI中MongoDB Input步骤如何用前序MySQL查询值执行$match筛选
PDI Table Input字段传递至MongoDB Input查询的实现方案
失效原因说明
你之前的写法不生效是因为两个核心问题:
${PARAMETER}语法仅适用于调用全局/作业级别的参数,无法直接读取前序步骤输出的流字段- 直接写
$ID_EXECUCAO会被MongoDB的查询解析器识别为内置操作符,不会匹配你前序步骤传递的字段值
两种可行实现方案
方案1:单值场景(Table Input仅返回1条ID_EXECUCAO记录)
- 在Table Input步骤后新增「设置变量」步骤,选择ID_EXECUCAO作为变量值来源,自定义变量名(例如
GLOBAL_EXEC_ID),有效范围设置为「根作业」 - 将MongoDB Input步骤放置在同一作业的后续转换中,查询写法调整为:
{ $match: { "IdExecucao": ${GLOBAL_EXEC_ID} } }
如果IdExecucao是字符串类型,需要给变量包裹引号,写成 "${GLOBAL_EXEC_ID}"
方案2:多值场景(Table Input返回多条ID_EXECUCAO记录,需逐条匹配)
- 替换普通MongoDB Input步骤为「MongoDB Document Input」步骤,该组件原生支持流字段作为查询参数
- 勾选步骤配置页的「使用字段替换查询中的?{}占位符」选项
- 查询写法调整为:
{ $match: { "IdExecucao": ?{ID_EXECUCAO} } }
PDI会自动将前序流的ID_EXECUCAO字段值填充到占位符位置,无需额外配置。
注意事项
- 不要在同一个转换内同时执行「设置变量」和「读取该变量」的操作:PDI的转换步骤会并行初始化,变量还未完成赋值就会被读取,导致空值
- 数值类型的匹配不需要给占位符/变量包裹引号,字符串类型需要手动包裹引号(方案2除外,组件会自动处理类型格式)
内容的提问来源于stack exchange,提问作者Fernanda Andretto
相关产品推荐
相关产品推荐

