sql >> Databasteknik >  >> NoSQL >> MongoDB

JSON-sökvägsförälderobjekt eller motsvarande MongoDB-fråga

Strax efter att jag lagt till min egen bounty kom jag på lösningen. Mitt problem har samma grundläggande struktur, som är en överordnad identifierare, och några N underordnade nyckel/värdepar för betyg (kvalitet, värde, etc...).

Först behöver du ett JSON-inmatningssteg som får SKU, Name och size_break_costs-matrisen, allt som strängar. Den viktiga delen är att size_break_costs är en sträng och är i princip bara en strängad JSON-array. Se till att "Ignorera saknad sökväg" är markerad under fliken Innehåll i JSON-inmatningen, om du får en med en tom array eller fältet saknas av någon anledning.

För dina fält, använd:

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

Jag lade till ett "Filter rader"-block efter det här steget, med villkoret "SizeBreakCosts IS NOT NULL", som sedan skickas till ett andra JSON Input-block. Detta andra JSON-block måste du kontrollera "Källan är definierad i ett fält?", och ställa in värdet för "Hämta källa från fält" till "SizeBreakCosts", eller vad du nu kallade det i det första JSON-inmatningsblocket.

Återigen, se till att "Ignorera saknad sökväg" är markerad, liksom "Ignorera tom fil". Från det här blocket vill vi få två fält. Vi kommer redan att ha ProductSKU och ProductName med varje rad som skickas in, och det här andra JSON-inmatningssteget kommer att dela upp det ytterligare i hur många rader som helst i SizeBreakCosts-ingången JSON. För fält, använd:

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

Som du kan se använder dessa sökvägar "$.[*].FieldName", eftersom JSON-strängen vi skickade in har en array som rotobjekt, så vi hämtar varje objekt i den arrayen och analyserar dess kvantitet och storlek.

Nu ska varje rad ha SKU och namn från det överordnade objektet, och kvantiteten och storleken från varje underordnat objekt. När jag dumpade det här exemplet till en textfil fick jag:

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



  1. Mongodb Aggregationsram för graler 1.3.7

  2. mongodb-fel vid validering av inställningar:endast ett positionsargument är tillåtet

  3. Hantera Python Multiprocessing med MongoDB

  4. Argument som skickas in måste vara en enda sträng på 12 byte