如何用NiFi将数字数组转为字符串数组并适配MongoDB查询?
问题解决方案
一、将数字数组转换为字符串数组
方法1:预处理阶段转换
如果数据还未存入Mongo,用JavaScript遍历数组转字符串:
// 假设原数据对象为data data.errId = data.errId.map(num => num.toString());
方法2:Mongo聚合实时转换
如果数据已在Mongo中,用聚合操作修改字段格式:
db.your_collection.aggregate([ { $set: { errId: { $map: { input: "$errId", as: "num", in: { $toString: "$$num" } } } } }, // 可选:保存修改结果 { $out: "your_collection" } ])
二、修复Mongo查询与splitJson报错
1. 修正Mongo查询语句
你原查询{"errId": "$.errId"}写法错误,Mongo匹配多值需用$in操作符:
- 若Mongo中errId存为数字:
{"errId": { "$in": [1234, 1235] }} - 若已转成字符串:
{"errId": { "$in": ["1234", "1235"] }}
如果是在ETL工具(如NiFi)中引用属性,需用工具变量语法(比如${errId}),且属性值需为合法数组格式(如[1234,1235])。
2. 解决splitJson无有效JSON报错
- 确认Mongo输出为标准JSON:多文档返回需是JSON数组;单文档需先包装成数组(比如用ReplaceText组件添加首尾
[和])。 - 检查splitJson的
Json Path Expression配置:顶层数组填$,嵌套数组填对应路径(如$.documents)。 - 清理多余字符:若Mongo输出带非JSON前缀/后缀,用Trim或ReplaceText组件去除。
内容的提问来源于stack exchange,提问作者Abhay Rajput
相关产品推荐
相关产品推荐

