2017-02-05 2 views
0

Ich muss Datenbank Abfrage Ergebnis in Dataweave und überspringen Dopplicates sowie einige Elemente basierend auf einer Bedingung Iterieren. Angenommen, vales für eine Spalte order kommt wie: 10-ord, 11-ord, 12-ord, ich sollte nur 11-ord abholen und andere Zeilen überspringen, deren Wert mit -ord endet.Mule- Iterieren durch eine Karte in Dataweave und Überspringen von DUBLICATE-Elementen

Rest der Werte, die nicht mit endet - ord sollte abgeholt werden.

Der aktuelle Code gibt ein bestimmtes Element, aber nicht die oben hervorgehobene Bedingung. Der aktuelle Code ist:

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

Antwort

0

Sie könnten es basierend auf der "Filter" -Klausel erreichen. Ich baute eine Beispiellogik, die Ihren Fall unten demonstriert:

%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

Sie sollten Filter vor der Zuordnung für bessere Leistung verwenden. Versuchen Sie folgende Filter für Ihre Anforderung

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

HTH

1

Mit Filter, distinctBy und oder Klausel Sie können es erreichen

%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 

Ausgabe

[ 
    { 
    "id": "value", 
    "number": "11-ord" 
    }, 
    { 
    "id": "value", 
    "number": "14" 
    } 
] 

Doppelte Werte und Werte mit -ORd sind mit einer Ausnahme

+0

Gute Antwort, verwenden Sie die eingebaute 'distinctBy'-Funktion von dataweave. –

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

Vielen Dank für dieses Code-Snippet, das Ihnen sofortige Hilfe bieten kann. Eine richtige Erklärung [würde erheblich verbessern] (// meta.stackexchange.com/q/114762) ihren pädagogischen Wert, indem sie * warum * dies eine gute Lösung für das Problem ist, und es für zukünftige Leser mit ähnlichen, nützlicher machen würde, aber nicht identisch, Fragen. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –

0

entfernen Sie können versuchen, beide enthalten oder die Teil Login wie [3..5] passende ord und Filtern die JSON-Objekte.

Verwandte Themen