Mule 如何在Dataweave 2.0中获取某个键匹配的所有值?

Mule 如何在Dataweave 2.0中获取某个键匹配的所有值?,mule,dataweave,anypoint-studio,mulesoft,Mule,Dataweave,Anypoint Studio,Mulesoft,有效负载: [ { "Contacts": "123456,098765", "Emails" : "" }, { "Contacts": "ABC123", "Emails" : "" } ] [ { "Contacts": "123456,098765"

有效负载:

[
{
    "Contacts": "123456,098765",
    "Emails" : ""
},
{
    "Contacts": "ABC123",
    "Emails" : ""
}
]
[
{
    "Contacts": "123456,098765",
    "Emails" : "test123@test.com, test@test.com"
},
{
    "Contacts": "ABC123",
    "Emails" : "ABC@test.com"
}
]
如何从下面的对象数组中获取联系人Id与有效负载中的每一行相匹配的所有电子邮件的列表?(预期产出如下)

可变账户控制

{
    "queryResponse": [
        {
            "Email": "test123@test.com",
            "SalesforceId": "123456"
        },
        {
            "Email": "test@test.com",
            "SalesforceId": "098765"
            
        },
        {
            "Email": "ABC@test.com",
            "SalesforceId": "ABC123"
            
        }

    ]
}
预期输出:

[
{
    "Contacts": "123456,098765",
    "Emails" : ""
},
{
    "Contacts": "ABC123",
    "Emails" : ""
}
]
[
{
    "Contacts": "123456,098765",
    "Emails" : "test123@test.com, test@test.com"
},
{
    "Contacts": "ABC123",
    "Emails" : "ABC@test.com"
}
]


我接受了萨利姆·汗的回答,因为他引导我朝着正确的方向和逻辑去处理电子邮件。我只需要重新设计地图逻辑

payload map (row, index) -> {
    "Contacts" : row."Contacts",
    "Emails" : (qResp.queryResponse filter (row."Contacts" contains $.SalesforceId)) reduce ((item,acc = "") ->  (acc ++ "," ++ item.Email)[1 to -1]
    ),
}

我接受了萨利姆·汗的回答,因为他引导我朝着正确的方向和逻辑去处理电子邮件。我只需要重新设计地图逻辑

payload map (row, index) -> {
    "Contacts" : row."Contacts",
    "Emails" : (qResp.queryResponse filter (row."Contacts" contains $.SalesforceId)) reduce ((item,acc = "") ->  (acc ++ "," ++ item.Email)[1 to -1]
    ),
}

希望这个组合能有所帮助


希望这项合作能有所帮助


想添加一个更简洁的解决方案来展示另一种方法

%dw 2.0
output application/json

var qResp =
{
    "queryResponse": [
        {
            "Email": "test123@test.com",
            "SalesforceId": "123456"
        },
        {
            "Email": "test@test.com",
            "SalesforceId": "098765"
            
        },
        {
            "Email": "ABC@test.com",
            "SalesforceId": "ABC123"
            
        }

    ]
}

--- 

payload map (value) ->
    {
        'Contacts':value.Contacts,
        'Emails': qResp.queryResponse[?(value.Contacts contains $.SalesforceId)]..Email joinBy ", "
    }

想添加一个更简洁的解决方案来展示另一种方法

%dw 2.0
output application/json

var qResp =
{
    "queryResponse": [
        {
            "Email": "test123@test.com",
            "SalesforceId": "123456"
        },
        {
            "Email": "test@test.com",
            "SalesforceId": "098765"
            
        },
        {
            "Email": "ABC@test.com",
            "SalesforceId": "ABC123"
            
        }

    ]
}

--- 

payload map (value) ->
    {
        'Contacts':value.Contacts,
        'Emails': qResp.queryResponse[?(value.Contacts contains $.SalesforceId)]..Email joinBy ", "
    }

我使用(iter$$)得到
映射错误。这就是我得到的错误:
Invalid input“map using(iter=$$)->”`事实上,我发现,我只使用了map,它就工作了。我将发布更新后的答案。当你使用变量(使用关键字using)时,你的脚本是什么样子的?我完全尝试了你所做的,但它给了我上面的错误。我在下面发布的一个运行良好,因为我的剩余有效负载是以这种方式构建的。当然。您可以筛选联系人!=无效的我将用它更新我的答案。我使用(iter$$)得到
map的错误。这就是我得到的错误:
Invalid input“map using(iter=$$)->”`事实上,我发现,我只使用了map,它就工作了。我将发布更新后的答案。当你使用变量(使用关键字using)时,你的脚本是什么样子的?我完全尝试了你所做的,但它给了我上面的错误。我在下面发布的一个运行良好,因为我的剩余有效负载是以这种方式构建的。当然。您可以筛选联系人!=无效的我会用这个更新我的答案。这可能是因为我在dwlang中尝试过,所以这是有意义的。谢谢。萨利姆,我不确定这些图片链接是否经得起时间的考验。他们不需要。这只是当时的一个屏幕抓取,以表明脚本在操场上也如预期的那样工作。脚本作为一个选定的答案出现在那里,以防人们想参考它!!这可能是因为我尝试了dwlang,所以这是有意义的。谢谢。萨利姆,我不确定这些图片链接是否经得起时间的考验。他们不需要。这只是当时的一个屏幕抓取,以表明脚本在操场上也如预期的那样工作。脚本作为一个选定的答案出现在那里,以防人们想参考它!!事实上,这很好。我要试试这个牙刷,其实它很干净。我也要试试这个