使用 dataweave 2.0 根据多种条件用来自另一个数组的数据丰富一个 JSON 数组

enrich one JSON array with data from another based on multiple conditions using dataweave 2.0

最近,我问了 关于根据多个条件过滤和合并两个 JSON 的问题。

但是,现在我需要 mongo 变量来丰富 mysql 变量数据。如果条件

mongo.NUM_CONTROL = mysql.DOCNUM
mongo.NUM_ITEM = mysql.LIN_NUM_ITEM

不匹配,每个mongo元素保持不变。但如果它们匹配,每个 mongo 元素必须用 mysql 个等价项目丰富。

您可以使用以下数据编织表达式:

%dw 2.0
import * from dw::core::Arrays
output application/json
---
leftJoin(mongo, mysql, (m) -> m.NUM_CONTROL ++ "_" ++ m.NUM_ITEM, (s) -> s.DOCNUM ++ "_" ++ s.LIN_NUM_ITEM) map (item, index) -> 
  item.l ++ (if (item.r != null) item.r else {})

为了左连接两个数组,需要一个公共键字段。在这种情况下,根据您的场景,公共密钥对应于:

  • mongo:NUM_CONTROL 和 NUM_ITEM
  • mysql:DOCNUM 和 LIN_NUM_ITEM

因此,连接 mongo.NUM_CONTROL 和 mysql.NUM_ITEM 将为 mongo 提供唯一记录键,连接 mysql.DOCNUM 和 mysql.LIN_NUM_ITEM 将为唯一记录mysql 的关键。现在,这些计算出的键可用于左连接数组。使用下划线字符(或任何其他非数字字符,例如管道)作为分隔符将确保匹配正确的记录(如果您有 mongo 记录 NUM_CONTROL = 1 NUM_ITEM = 11 和 mysql 记录,DOCNUM = 11 和 LIN_NUM_ITEM = 1,如果没有分隔符,mongo 和 [= 的计算键值相同35=] (111) 并且它们会被错误地连接。使用分隔符,这不会发生,因为 mongo 计算的键将是 1_11 和 mysql 计算的键 11_1).