sql >> Database >  >> NoSQL >> MongoDB

JSON-pad bovenliggend object of gelijkwaardige MongoDB-query

Kort nadat ik mijn eigen premie had toegevoegd, bedacht ik de oplossing. Mijn probleem heeft dezelfde basisstructuur, namelijk een ouder-ID, en een aantal N-paren van onderliggende sleutel/waarde voor beoordelingen (kwaliteit, waarde, enz...).

Eerst hebt u een JSON-invoerstap nodig die de array SKU, Name en size_break_costs krijgt, allemaal als tekenreeksen. Het belangrijkste is dat size_break_costs een string is en in feite gewoon een stringified JSON-array is. Zorg ervoor dat onder het tabblad Inhoud van de JSON-invoer dat "Ontbrekend pad negeren" is aangevinkt, voor het geval u er een krijgt met een lege array of het veld om de een of andere reden ontbreekt.

Gebruik voor uw velden:

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

Ik heb na deze stap een blok "Filter rijen" toegevoegd, met de voorwaarde "SizeBreakCosts IS NOT NULL", die vervolgens wordt doorgegeven aan een tweede JSON-invoerblok. In dit tweede JSON-blok moet je "Bron is gedefinieerd in een veld?" aanvinken en de waarde van "Bron ophalen uit veld" instellen op "SizeBreakCosts", of hoe je het ook hebt genoemd in het eerste JSON-invoerblok.

Zorg er opnieuw voor dat "Negeer ontbrekend pad" is aangevinkt, evenals "Leeg bestand negeren". Van dit blok willen we twee velden krijgen. We hebben al ProductSKU en ProductName bij elke rij die wordt doorgegeven, en deze tweede JSON-invoerstap zal deze verder splitsen in hoeveel rijen er ook zijn in de invoer-JSON van SizeBreakCosts. Gebruik voor velden:

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

Zoals u kunt zien, gebruiken deze paden "$.[*].FieldName", omdat de JSON-tekenreeks die we hebben doorgegeven een array heeft als het hoofditem, dus we krijgen elk item in die array en ontleden de hoeveelheid en maat.

Nu moet elke rij de SKU en naam van het bovenliggende object hebben, en de hoeveelheid en grootte van elk onderliggend object. Door dit voorbeeld naar een tekstbestand te dumpen, kreeg ik:

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



  1. Object.keys, hoe krijg je een lijst met sleutels in mongodb

  2. ReplicaSetId-conflict tijdens het toevoegen van node MongoDB

  3. Hoe PHP verbinden met MongoDB?

  4. Objecteigenschappen opslaan in redis