簡體   English   中英

使用 dataweave 2.0 基於多種條件用來自另一個數組的數據豐富一個 JSON 數組

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

最近,我問了這個關於基於多個條件過濾和合並兩個 JSON 的問題。

但是,現在我需要用mysql變量數據來豐富mongo變量。 如果條件

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

不匹配,每個 mongo 元素保持不變。 但是如果它們匹配,每個mongo元素都必須用mysql等效項來豐富。

您可以使用以下 dataweave 表達式:

%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 提供唯一的記錄鍵。 現在,這些計算出的鍵可用於左連接數組。 使用下划線字符(或任何其他非數字字符,例如管道)作為分隔符將確保匹配正確的記錄(如果您有一個 NUM_CONTROL = 1 和 NUM_ITEM = 11 的 mongo 記錄和一個 mysql 記錄使用 DOCNUM = 11 和 LIN_NUM_ITEM = 1,如果沒有分隔符,mongo 和 mysql (111) 的計算鍵值將相同,並且它們會錯誤地連接。使用分隔符,這不會發生,因為 mongo 計算的鍵將是1_11 和 mysql 計算出的密鑰 11_1)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM