Mule-在dataweave中遍历映射并跳过重复元素
我需要在dataweave中迭代数据库查询结果,并根据某些条件跳过重复项和少数元素。比如说,如果列订单的值如下所示: 10-ord、11-ord、12-ord,我应该只选择11-ord,跳过任何其他以-ord结尾的行。 应拾取未以-ord结尾的其余值 当前代码给出了不同的元素,但没有给出上面突出显示的条件。目前的代码是:Mule-在dataweave中遍历映射并跳过重复元素,mule,dataweave,Mule,Dataweave,我需要在dataweave中迭代数据库查询结果,并根据某些条件跳过重复项和少数元素。比如说,如果列订单的值如下所示: 10-ord、11-ord、12-ord,我应该只选择11-ord,跳过任何其他以-ord结尾的行。 应拾取未以-ord结尾的其余值 当前代码给出了不同的元素,但没有给出上面突出显示的条件。目前的代码是: payload map ((payload, indexOfPayload) -> { id: payload.orderId , number: payload.ord
payload map ((payload, indexOfPayload) -> {
id: payload.orderId ,
number: payload.orderNumber
}) distinctBy $.number
您可以根据“filter”子句实现它。我构建了一个示例逻辑,在下面演示您的案例:
%dw 1.0
%var payload = [
{
"id":"value",
"orderNumber": "10-ord"
},
{
"id":"value",
"orderNumber": "11"
},
{
"id":"value",
"orderNumber": "12-ord"
},
{
"id":"value",
"orderNumber": "13-ord"
},
{
"id":"value",
"orderNumber": "14-ord"
}
]
%output application/json
---
payload filter (not ($.orderNumber contains '-ord') )
为了获得更好的性能,应该在映射之前使用过滤器。根据您的要求尝试以下过滤器
payload filter ($.orderNumber contains '-ord') and $.orderNumber == '11-ord' map ((payload, indexOfPayload) -> {
id: payload.orderId ,
number: payload.orderNumber
})
HTH使用过滤器,通过和或子句进行区分,您可以实现它
%dw 1.0
%var payload = [
{
"id":"value",
"orderNumber": "10-ord"
},
{
"id":"value",
"orderNumber": "11-ord"
},
{
"id":"value",
"orderNumber": "11-ord"
},
{
"id":"value",
"orderNumber": "12-ord"
},
{
"id":"value",
"orderNumber": "13-ord"
},
{
"id":"value",
"orderNumber": "14"
},
{
"id":"value",
"orderNumber": "14"
}
]
%output application/json
---
payload filter (not($.orderNumber contains '-ord')) or $.orderNumber =='11-ord' map ((payload, indexOfPayload) -> {
id: payload.id ,
number: payload.orderNumber
}) distinctBy payload.orderNumber
输出
[
{
"id": "value",
"number": "11-ord"
},
{
"id": "value",
"number": "14"
}
]
重复的值和带有-ord的值会被删除,除了一个之外。您可以尝试包含或子字符串登录,如[3..5]匹配ord并过滤JSON对象。回答得好,请使用dataweave的内置
distinctBy
功能。感谢您提供的这段代码片段,它可能会提供一些即时帮助。通过说明为什么这是一个很好的解决问题的方法,正确地解释它的教育价值,并将使它对未来有类似但不完全相同问题的读者更有用。请在回答中添加解释,并说明适用的限制和假设。
%dw 1.0
%var payload = [
{
"id":"value",
"orderNumber": "10-ord"
},
{
"id":"value",
"orderNumber": "11-ord"
},
{
"id":"value",
"orderNumber": "11-ord"
},
{
"id":"value",
"orderNumber": "12-ord"
},
{
"id":"value",
"orderNumber": "13-ord"
},
{
"id":"value",
"orderNumber": "26"
},
{
"id":"value",
"orderNumber": "26"
}
]
%output application/json
---
payload filter (not ($.orderNumber contains '-ord')) or $.orderNumber=='11-ord' map ((payload, indexOfPayload) -> {
id: payload.id ,
number: payload.orderNumber
}) distinctBy payload.orderNumber