En viktig faktor när du designar ett schema för MongoDB är inte vad din data är, utan hur du kommer att använda den. Utan att ta reda på vilken typ av läsning och skrivning du kommer att göra (och hur prestanda de kommer att vara) kan det vara svårt att utforma ett "optimalt" schema.
Det finns några grundläggande riktlinjer som du kan tänka på för att undvika att stöta på problem. En av dem är att undvika att designa dokument som fortsätter att växa obegränsat. Det betyder att du inte ska bädda in beställningar i kunddokument. En annan regel är att saker som inte är "av intresse" på egen hand (eller inte existerar på egen hand) förmodligen är bättre att bädda in. Detta tyder på att beställningsartiklar inte förtjänar sin egen samling och helt enkelt bör behandlas som attribut för beställningar (vilket är vad de faktiskt är).
Denna exakta övning täcks av MongoDB-utvecklarutbildningen, och är ett ganska typiskt exempel på schemadesign.
Slutsatsen är att du bör ha tre samlingar:
Produkter
Kunder
Beställningar
Beställningar kommer att referera till kunder (eventuellt avnormalisera viss information från kundinsamling) och de kommer att referera till produkter (i den mängd beställningsartiklar som de kommer att innehålla).
Ytterligare samlingar och exakta fält i alla dessa samlingar beror på ditt specifika användningsfall, men jag kan inte se ett genomförbart scenario att ha färre samlingar än dessa tre.