MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Übergeordnetes JSON-Pfadobjekt oder entsprechende MongoDB-Abfrage

Kurz nachdem ich mein eigenes Kopfgeld hinzugefügt hatte, fand ich die Lösung heraus. Mein Problem hat die gleiche Grundstruktur, nämlich eine übergeordnete Kennung und einige N untergeordnete Schlüssel/Wert-Paare für Bewertungen (Qualität, Wert usw.).

Zunächst benötigen Sie einen JSON-Eingabeschritt, der das Array SKU, Name und size_break_costs als Strings abruft. Der wichtige Teil ist, dass size_break_costs ein String und im Grunde nur ein stringifiziertes JSON-Array ist. Stellen Sie sicher, dass auf der Registerkarte „Inhalt“ der JSON-Eingabe „Fehlender Pfad ignorieren“ aktiviert ist, falls Sie einen Pfad mit einem leeren Array erhalten oder das Feld aus irgendeinem Grund fehlt.

Verwenden Sie für Ihre Felder:

Name           | Path               | Type
ProductSKU     | $.sku              | String
ProductName    | $.name             | String
SizeBreakCosts | $.size_break_costs | String

Ich habe nach diesem Schritt einen „Filter rows“-Block mit der Bedingung „SizeBreakCosts IS NOT NULL“ hinzugefügt, der dann an einen zweiten JSON-Input-Block übergeben wird. In diesem zweiten JSON-Block müssen Sie „Quelle ist in einem Feld definiert?“ überprüfen und den Wert von „Quelle aus Feld abrufen“ auf „SizeBreakCosts“ oder wie auch immer Sie ihn im ersten JSON-Eingabeblock benannt haben /P>

Stellen Sie erneut sicher, dass "Fehlenden Pfad ignorieren" sowie "Leere Datei ignorieren" aktiviert sind. Aus diesem Block möchten wir zwei Felder erhalten. Wir haben bereits ProductSKU und ProductName mit jeder übergebenen Zeile, und dieser zweite JSON-Eingabeschritt wird sie weiter in so viele Zeilen aufteilen, wie sich in der SizeBreakCosts-Eingabe-JSON befinden. Verwenden Sie für Felder:

Name     | Path           | Type
Quantity | $.[*].quantity | Integer
Size     | $.[*].size     | String

Wie Sie sehen können, verwenden diese Pfade „$.[*].FieldName“, da die von uns übergebene JSON-Zeichenfolge ein Array als Stammelement hat, sodass wir jedes Element in diesem Array erhalten und seine Menge analysieren und Größe.

Jetzt sollte jede Zeile die SKU und den Namen des übergeordneten Objekts sowie die Menge und Größe von jedem untergeordneten Objekt enthalten. Als ich dieses Beispiel in eine Textdatei ausgab, bekam ich:

ProductSKU;ProductName;Size;Quantity
SK3579;Authority;S; 80
SK3579;Authority;M; 14
SK3579;Authority;L; 55