【问题标题】:MuleSoft DataWeave to roll up joined query resultsMuleSoft DataWeave 汇总联合查询结果
【发布时间】:2023-01-14 15:36:40
【问题描述】:

我已经从将多个表连接在一起的数据库调用中返回了一些数据。当前的有效载荷看起来像这样:

[
 { "ID": 11111
 , "Ref": "123ABC"
 , "Year": 1994
 , "Title": "A title"
 , "Author": "Joe Bloggs"
 },
 { "ID": 11111
 , "Ref": "123ABC"
 , "Year": 1994
 , "Title": "A title"
 , "Author": "John Smith"
 },
 { "ID": 22222
 , "Ref": "456DEF"
 , "Year": 2018
 , "Title": "Another title"
 , "Author": "Lucy Jones"
 }
]

任何人都可以帮助将其转换为所需的 DataWeave 吗:

[
 { "ID": 11111
 , "Ref": "123ABC"
 , "Year": 1994
 , "Title": "A title"
 , "Authors": [ {"Name": "Joe Bloggs"}, {"Name": "John Smith"} ]
 },
 { "ID": 22222
 , "Ref": "456DEF"
 , "Year": 2018
 , "Title": "Another title"
 , "Authors": [ {"Name": "Lucy Jones"} ]
 }
]

我试过使用 distinctBy 和过滤器,但到目前为止只能做到这一点:

%dw 2.0
output application/json
var myVar = payload distinctBy () -> 
   { ID: $.ID
   , Ref: $.Ref
   , Year: $.Year
   , Title: $.Title
   } 
---
myVar map () -> using (thisID = myVar.ID)
   { ID: $.ID
   , Ref: $.Ref
   , Year: $.Year
   , Title: $.Title
   , Authors: payload map {Name: $.Author} 
   //, Authors: payload filter ($.*ID contains thisID) map {Name: $.Author}
   }

结果:

[
  {
    "ID": 11111,
    "Ref": "123ABC",
    "Year": 1994,
    "Title": "A title",
    "Authors": [
      {
        "Name": "Joe Bloggs"
      },
      {
        "Name": "John Smith"
      },
      {
        "Name": "Lucy Jones"
      }
    ]
  },
  {
    "ID": 22222,
    "Ref": "456DEF",
    "Year": 2018,
    "Title": "Another title",
    "Authors": [
      {
        "Name": "Joe Bloggs"
      },
      {
        "Name": "John Smith"
      },
      {
        "Name": "Lucy Jones"
      }
    ]
  }
]

【问题讨论】:

    标签: mule dataweave mulesoft


    【解决方案1】:

    假设作者以外的字段对于特定 ID 是相同的,您可以使用 groupBy 为每个 ID 分组。 然后通过将 Author 更新为等于组中所有 Author 的组合值来映射分组值。

    %dw 2.0
    output application/json
    ---
    payload groupBy $.ID
        pluck ((groupedValues) -> {
            (groupedValues[0] - "Author"),
            Author: groupedValues map {Name: $.Author}
        })
    

    另请注意,using 关键字在 Mule 4 中已弃用,因此请避免使用它。您应该改为使用 do block

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-08
      • 2017-04-05
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多