如何在 Mulesoft 中使用 Dataweve 使用 groupBy 函数

问题描述

我在 Dataweave 中有以下 JSON 数据。我想 groupBy products.plu 然后总结数量

请参阅下面的输入和所需的输出。谢谢

{
  "brandCode": "XXX","storeCode": "XX100","products": [
 {
    "plu": "NF0A529SWE7100L","qty": 2.000
  },{
    "plu": "NF0A529SWE7100L","qty": -1.000
  },{
    "plu": "NF0A529SWE7100M","qty": 2.000
  }
]
  }

期望的输出

{
  "brandCode": "XXX","qty": 1.000
  },"qty": 2.000
  }]
  }

解决方法

我的代码在下面

{
      "brandCode": payload.brandCode,"storeCode": payload.storeCode,"products": 
       payload.products groupBy $.plu distinctBy $ pluck $ map{
        "plu": $.storeCode,"qty": (sum($.qty)),

但 outPut :plu 是数组(例如:"plu": ["NF0A529SWE7100L"]) 我必须使用 min($.plu) , 我可以知道我们有最好的方法吗?

,

一种方法可能是(使用您的代码)

输入:

{
  "brandCode": "XXX","storeCode": "XX100","products": [
  {
    "plu": "NF0A529SWE7100L","qty": 2.000
  },{
    "plu": "NF0A529SWE7100L","qty": -1.000
  },{
    "plu": "NF0A529SWE7100M","qty": 2.000
  }
]
}

脚本:

%dw 2.0
output application/json
---
{
      "brandCode": payload.brandCode,"products":  payload.products groupBy $.plu pluck $ map {
           plu: $[0].plu,qty:sum($.qty)
      }
}

输出:

{
  "brandCode": "XXX","products": [
    {
      "plu": "NF0A529SWE7100L","qty": 1.000
    },{
      "plu": "NF0A529SWE7100M","qty": 2.000
    }
  ]
}
,

在骡子 4.3.x DW 2.3.x 上

%dw 2.0
output application/json
fun sumProducts(data: Object): Object = (
    data update {
        case .products -> 
            data.products groupBy $.plu pluck (value,key,index) -> 
                {
                    plu: key,qty: sum(value.qty default [])
                }
    }
)
---
sumProducts(payload)