使用 pluck 时我在哪里放置 groupBy

问题描述

我正在学习 dwlang.fun 上的 Dataweave 教程(强烈推荐!),我终于被使用对象一章的 pluck 部分难住了。输入是我需要按订单 ID 分组的四个订单行的单个数组。 输入是

[
  {
    "orderId"  : 1,"customer" : "Josh","lineId"   : 1,"lineItem" : "Shoes","price"    : 50
  },{
    "orderId"  : 1,"lineId"   : 2,"lineItem" : "Socks","price"    : 20
  },{
    "orderId"  : 2,"customer" : "Mariano","lineId"   : 3,"lineItem" : "Shirt","price"    : 30
  },"lineId"   : 4,"lineItem" : "Jacket","price"    : 80
  }
]

并且所需的输出一个单独的数组,在其自己的数组中包含每个订单:

[
  [
    {
      "orderId": 1,"customer": "Josh","lineId": 1,"lineItem": "Shoes","price": 50
    },{
      "orderId": 1,"lineId": 2,"lineItem": "Socks","price": 20
    }
  ],[
    {
      "orderId": 2,"customer": "Mariano","lineId": 3,"lineItem": "Shirt","price": 30
    },{
      "orderId": 2,"lineId": 4,"lineItem": "Jacket","price": 80
    }
  ]
]

我的代码关闭,但分组已关闭。我的代码

%dw 2.0
output json
var myData = payload
    map (order,index) -> {
        (order pluck (v,k,idx) -> {
            (k): v
        })
  }
---
myData groupBy ((order,index) -> order.orderId)

我的输出是:

{
  "1": [
    {
      "orderId": 1,"2": [
    {
      "orderId": 2,"price": 80
    }
  ]
}

解决方法

我不确定 myData 是否有用,我已将其删除。我在 groupBy() 之后使用了 pluck() 来收集每个组键的值,这似乎是预期的:

%dw 2.0
output application/json
---
payload 
    groupBy ((order,index) -> order.orderId)
    pluck ((value,key,index) -> value)
,

这里有一个替代解决方案(没有采摘)

%dw 2.0
output application/json
var groupedOrders=payload groupBy (item,index) -> item.orderId
---
(groupedOrders mapObject(v0,k0) ->
{
    'key':(v0)
}).*'key'