Mule-在dataweave中遍历映射并跳过重复元素

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

我需要在dataweave中迭代数据库查询结果,并根据某些条件跳过重复项和少数元素。比如说,如果列订单的值如下所示: 10-ord、11-ord、12-ord,我应该只选择11-ord,跳过任何其他以-ord结尾的行。

应拾取未以-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