sql >> Databasteknik >  >> NoSQL >> MongoDB

Spara, organisera och fråga efter produkter, alternativ/taggar och kategorier

Jag driver också en e-handelswebbplats. Här är mitt råd om hur jag implementerar funktionerna du nämnde. Hoppas det hjälper.

  • Kategorier

Jag organiserar dem i en platt struktur, i ditt fall skulle det vara:

    {_id: 1, name: "Electronics", parentId: 0, idPath: "/0/1/" ...}
    {_id: 2, name: "Computers", parentId: 1, idPath: "/0/1/2/", ...}
    {_id: 3, name: "Graphic Cards", parentId: 2, idPath: "/0/1/2/3/", ...}

Och produkten behöver nu bara finnas i bladkategorierna. I ditt fall:

    {
        _id: asdasfwetrw34tw34t245y45y,
        name: "NVIDIA GTX670",
        price: 99.50,
        ...
        ...
        categoryIds: [3]
    }

Produkten kan naturligtvis finnas i flera kategorier, så categoryIds förblir en array.Här är den knepiga delen. När du listar Electronics kategori kan du hitta alla dess underkategorier genom att:

    db.categories.find({idPath: /^\/0\/1/})

idPath index fungerar här så det kommer att gå snabbt. när du tar reda på alla underkategorier kan du enkelt hitta alla produkter i dem (bygg index på categoryIds av Product samling).

Eller alternativt kan du läsa in alla kategorier i minnet och bygga en hashtabell med nyckel->categoryId, value->[alla underkategorier]. Dina kategorier ändras vanligtvis inte ofta och du kommer inte att ha många kategorier. Så det kommer att gå bra.

  • Taggar/Alternativ

Först och främst tror jag att det är något fel med din kategori. Women fashion är något generiskt, bör du lägga din produkt i något mer specifikt, och alternativen bör finnas där också. Till exempel kan det finnas en kategori coat som har size &color , annat än women fashion . Även om det fortfarande kan finnas color alternativ på women fashion eftersom det är en gemensam egenskap för alla underkategorier.
Om du tänker efter, varför är alla underkategorier organiserade i en överordnad kategori? eftersom de har något gemensamt. Den gemensamma delen bör vara de vanliga alternativen för överordnad kategori. det vill säga att det ska finnas ett arv mellan alla överordnade kategorier och underkategorier. Till exempel:

Sedan coat skulle äntligen ha 2 alternativ color &size . sun glasses :color &shape . När du tittar på women fashion , det finns bara ett alternativ color . Det filtrerar även underkategorierna eftersom de ärver från women fashion .
När det gäller färgvärdena är min idé att bara använda standardfärgerna Strawberry Red är faktiskt red , Tangerine är faktiskt orange . Du vill egentligen inte att de ska visas när du filtrerar produkterna. Annars skulle det finnas för många alternativ, definitivt inte bra för användarupplevelsen.
Men förutom color alternativ från kategorin, min webbplats har också något som kallas customizable options . Dessa alternativ är endast definierade på produkterna. De visas aldrig när du tittar på kategori. Här kan du ha Strawberry Red &Tangerine . Enligt min åsikt är dessa inte "naturliga" egenskaper hos en produkt. De används endast för att få användaren att känna sig mer bekväm när han tittar på produkten. Således kan du också ha alternativ av detta slag som Tangerine with figure etc.
En sak till om alternativ. du kanske vill markera vilka alternativ som är tänkta att användas för att filtrera produkter. Till exempel color är definitivt en. Medan dimension kanske inte.

Om typer av alternativ. Din är bra om den räcker för dig. Jag har många fler typer som Number , String , Single Choice , Multiple Choices . Jag planerar också att implementera Unit . Knepig del av Unit är det till exempel

1GB = 1024MB = 1024*1024B

Så när du får en hårddisk på 1GB och 1TB, kanske du vill göra en konvertering innan du filtrerar produkter. Detta är utanför ämnet. Jag återkommer till din fråga.

Observera att även om alternativen för olika kategorier har samma namn. De är troligen inte samma sak. Material av Coat och Furniture är 2 olika saker. Så jag tenderar att definiera olika alternativ för olika kategorier. Det kan alltså finnas color för toys och color för women fashion . Detta kommer inte i konflikt med arvet som nämns ovan eftersom från någon nivå börjar underkategorierna dela samma alternativ. Detta är helt relaterat till hur du organiserar din kategoristruktur. Och om du vill ändra kategoristruktur eller flytta produkter någon gång, skulle det vara smärtsamt. Så var försiktig när du definierar dina kategorier.

Det är allt som kommer upp i mitt sinne. Jag är rädd att jag inte är engelska som modersmål, så du kan tycka att en del av mitt svar är svårt att förstå. Meddela mig gärna.




  1. Hur man definierar objekt i array i Mongoose-schemat korrekt med 2d geo-index

  2. Anslutning till MongoDB i Azure med Java

  3. MongoDB findOneAndReplace()

  4. Det gick inte att lösa löftesavvisning och skicka array som svar