sql >> Database >  >> NoSQL >> MongoDB

Producten, opties/tags en categorieën opslaan, organiseren en opvragen

Ik heb ook een e-commerce website. Hier is mijn advies over hoe ik de door u genoemde functies implementeer. Ik hoop dat het helpt.

  • Categorieën

Ik organiseer ze in een platte structuur, in jouw geval zou het zijn:

    {_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/", ...}

En het product hoeft nu alleen nog in de bladcategorieën te staan. In jouw geval:

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

Het product kan natuurlijk in meerdere categorieën zijn, dus de categoryIds blijft een array. Hier is het lastige deel. Wanneer u de Electronics . vermeldt categorie, kunt u alle subcategorieën vinden op:

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

idPath index werkt hier dus het gaat snel. wanneer u alle subcategorieën te weten komt, kunt u gemakkelijk alle producten erin vinden (bouw index op de categoryIds van Product collectie).

Of u kunt alle categorieën in het geheugen lezen en een hashtabel maken met de sleutel->categoryId, waarde->[alle subcategorieën]. Uw categorieën zullen meestal niet vaak veranderen en u zult niet veel categorieën hebben. Dus het komt wel goed.

  • Tags/Opties

Allereerst denk ik dat er iets mis is met je categorie. Women fashion is iets generieks, moet u uw product in iets specifiekers stoppen en de opties zouden er ook moeten zijn. Er is bijvoorbeeld een categorie coat die de size . heeft &color , anders dan women fashion . Hoewel er misschien nog color . is optie in women fashion omdat het een gemeenschappelijk kenmerk is van alle subcategorieën.
Als je erover nadenkt, waarom zijn alle subcategorieën dan georganiseerd in één bovenliggende categorie? omdat ze iets gemeen hebben. Dat gemeenschappelijke deel zou de gemeenschappelijke opties van de bovenliggende categorie moeten zijn. dat wil zeggen, er moet een overerving zijn tussen alle bovenliggende categorie en subcategorieën. Bijvoorbeeld:

Dan coat zou eindelijk 2 opties hebben color &size . sun glasses :color &shape . Wanneer je women fashion aan het bekijken bent , er is maar 1 optie color . Het filtert ook de subcategorieën omdat ze overerven van women fashion .
Wat betreft de kleurwaarden, mijn idee is om alleen de standaardkleuren Strawberry Red te gebruiken is eigenlijk red , Tangerine is eigenlijk orange . U wilt niet dat ze verschijnen wanneer u de producten filtert. Anders zouden er te veel opties zijn, zeker niet goed voor de gebruikerservaring.
Maar behalve color optie uit de categorie, mijn site heeft ook iets genaamd customizable options . Deze opties zijn alleen gedefinieerd op de producten. Ze verschijnen nooit wanneer u een categorie bekijkt. Hier kun je Strawberry Red &Tangerine . Dit zijn naar mijn mening geen 'natuurlijke' eigenschappen van een product. Ze worden alleen gebruikt om de gebruiker een comfortabeler gevoel te geven bij het bekijken van het product. U kunt dus ook een optie van dit soort hebben, zoals Tangerine with figure enz.
Nog iets over opties. misschien wilt u aangeven welke opties moeten worden gebruikt voor het filteren van producten. Bijvoorbeeld color is er zeker een. Terwijl dimension misschien niet.

Over soorten opties. De jouwe is prima als het genoeg voor je is. Ik heb veel meer typen zoals Number , String , Single Choice , Multiple Choices . Ik ben ook van plan om de Unit . te implementeren . Lastig onderdeel van Unit is dat bijvoorbeeld

1GB = 1024MB = 1024*1024B

Dus als u een harde schijf van 1 GB en 1 TB krijgt, wilt u misschien een conversie doen voordat u producten gaat filteren. Dit is buiten het onderwerp. Ik kom terug op je vraag.

Merk op dat hoewel de opties van verschillende categorieën dezelfde naam hebben. Ze zijn waarschijnlijk niet hetzelfde. Material van Coat en Furniture zijn 2 verschillende dingen. Dus ik heb de neiging om verschillende opties voor verschillende categorieën te definiëren. Zo is er misschien color voor toys , en color voor women fashion . Dit is niet in strijd met de hierboven genoemde overerving, omdat vanaf een bepaald niveau de subcategorieën dezelfde opties beginnen te delen. Dit hangt volledig samen met hoe u uw categoriestructuur organiseert. En als u de categoriestructuur wilt wijzigen of producten op een bepaald moment wilt verplaatsen, zou dat pijnlijk zijn. Wees dus voorzichtig bij het definiëren van uw categorieën.

Dat is alles wat in me opkomt. Ik ben bang dat ik geen moedertaalspreker ben van het Engels, dus misschien vindt u een deel van mijn antwoord moeilijk te begrijpen. Laat het me gerust weten.




  1. Hoe kan ik unieke ID's maken voor ingesloten documenten in MongoDB?

  2. Hoe group by toepassen op genest document in MongoDB met MongoTemplate?

  3. ClusterControl op AWS implementeren om uw clouddatabase te beheren

  4. ember js associatie toegang backend nodejs mangoest