2017-02-05 10 views
0

Мне нужно выполнить итерацию результата запроса базы данных в dataweave и пропустить dublicates, а также несколько элементов, основанных на каком-то определенном состоянии. Скажем, если значения для столбца заказывают: 10-ord, 11-ord, 12-ord, я должен подбирать только 11-ord и пропускать любые другие строки, значение которых заканчивается -ord.Mule-Итерация через карту в передаче данных и пропуске элементов дублирования

Остальные значения, которые не заканчиваются - ord следует подбирать.

В текущем коде дается отличный элемент, но не выше выделенное условие. Текущий код:

payload map ((payload, indexOfPayload) -> { 
id: payload.orderId , 
number: payload.orderNumber 
}) distinctBy $.number 

ответ

0

Вы можете достичь этого на основе предложения «фильтр». Я построил логику примера, демонстрирующую ваш случай ниже:

%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')) 
0

Чтобы улучшить производительность, вы должны использовать фильтр перед отображением. Попробуйте следующий фильтр для вашего требования

payload filter ($.orderNumber contains '-ord') and $.orderNumber == '11-ord' map ((payload, indexOfPayload) -> { 
id: payload.orderId , 
number: payload.orderNumber 
}) 

НТН

1

Использование фильтра, 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": "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 удаляются, за исключением одного

+0

Хороший ответ, используйте встроенную функцию 'distinctBy' для передачи данных. –

0
%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 
+0

Благодарим вас за этот фрагмент кода, который может оказать немедленную помощь. Правильное объяснение [значительно улучшило бы] (// meta.stackexchange.com/q/114762) его образовательное значение, показав * почему * это хорошее решение проблемы и сделало бы его более полезным для будущих читателей с похожими, но не идентичные вопросы. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. –

0

Вы можете попробовать и содержит или подстрока Войти, как [3..5] соответствие Ord и фильтрации объектов JSON.

 Смежные вопросы

  • Нет связанных вопросов^_^