基于另一个数组值的Dataweave 2.0数组过滤

问题描述 投票:0回答:1

我正在尝试尝试匹配/过滤unmatchedIds数组中的以下lineId值,然后通过processorTransactionId过滤exampleFile的结果集。结果将是删除最后一个FinancialTransactionEntity,其中processorTransactionId =“ 000000062121029333”。

理论上,unmatchedIds数组和exampleFile数组的大小都可以是无界的。

任何指导/建议/示例都将不胜感激。目前,我很难使用dataweave过滤器来实现此目的。

{
  "unmatchedIds": [
    {
      "lineId": "000000062121029111"
    },
    {
      "lineId": "000000062121029222"
    }
  ]
}

exampleFile

[{
        "financialTransactionEntity": {
            "cardAcceptor": {
                "name": "Burger Inc.",
                "countryCode": "GBP"
            },
            "financialTransaction": {
                "debitOrCredit": "C",
                "amountInOriginalCurrency": {
                    "amount": "0000001000",
                    "exponent": "2"
                },
                "originalCurrencyCode": "826",
                "transactionDate": "2020-02-18"
            },
            "processorTransactionId": "000000062121029111"
        }
    },
    {
        "financialTransactionEntity": {
            "cardAcceptor": {
                "name": "McDonalds Inc.",
                "countryCode": "GBP"
            },
            "financialTransaction": {
                "debitOrCredit": "C",
                "amountInOriginalCurrency": {
                    "amount": "0000002000",
                    "exponent": "2"
                },
                "originalCurrencyCode": "826",
                "transactionDate": "2020-02-18"
            },
            "processorTransactionId": "000000062121029222"
        }
    },
    {
        "financialTransactionEntity": {
            "cardAcceptor": {
                "name": "McDonalds Inc.",
                "countryCode": "GBP"
            },
            "financialTransaction": {
                "debitOrCredit": "C",
                "amountInOriginalCurrency": {
                    "amount": "0000002000",
                    "exponent": "2"
                },
                "originalCurrencyCode": "826",
                "transactionDate": "2020-02-18"
            },
            "processorTransactionId": "000000062121029333"
        }
    }

]
arrays filter dataweave mulesoft
1个回答
0
投票

您可以使用groupByfilter功能获得结果。首先,您可以按unMatchIds分组lineId,然后可以对实际有效负载应用过滤器以消除所有不匹配的项目。

output application/json
var unMatchIdsGrouped = var.unMatchIds.unmatchedIds groupBy $.lineId
---
payload filter ((item) -> unMatchIdsGrouped[ item.financialTransactionEntity.processorTransactionId] !=null)
© www.soinside.com 2019 - 2024. All rights reserved.