MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zapisywanie, organizowanie i odpytywanie produktów, opcji/tagów i kategorii

Prowadzę też serwis e-commerce. Oto moja rada, jak zaimplementować funkcje, o których wspomniałeś. Mam nadzieję, że to pomoże.

  • Kategorie

Organizuję je w płaską strukturę, w Twoim przypadku byłoby to:

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

A produkt musi teraz znajdować się tylko w kategoriach liści. W Twoim przypadku:

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

Produkt może być oczywiście w wielu kategoriach, więc categoryIds pozostaje tablicą. Oto trudna część. Gdy wymieniasz Electronics kategorii, możesz znaleźć wszystkie jej podkategorie według:

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

idPath indeks działa tutaj, więc będzie szybko. kiedy znajdziesz wszystkie podkategorie, możesz łatwo znaleźć w nich wszystkie produkty (buduj indeks na categoryIds Product kolekcji).

Alternatywnie, możesz wczytać wszystkie kategorie do pamięci i zbudować tablicę mieszającą z kluczem->categoryId, value->[wszystkie podkategorie]. Twoje kategorie zwykle nie będą się często zmieniać i nie będziesz mieć wielu kategorii. Tak więc wszystko będzie dobrze.

  • Tagi/Opcje

Przede wszystkim myślę, że coś jest nie tak z twoją kategorią. Women fashion jest czymś ogólnym, powinieneś umieścić swój produkt w czymś bardziej konkretnym, a opcje również powinny tam być. Na przykład może istnieć kategoria coat który ma size &color , inne niż women fashion . Chociaż nadal może być color opcja w women fashion ponieważ jest to wspólna cecha wszystkich podkategorii.
Jeśli się nad tym zastanowisz, dlaczego wszystkie podkategorie są zorganizowane w jednej nadrzędnej kategorii? ponieważ mają coś wspólnego. Ta wspólna część powinna być wspólnymi opcjami kategorii nadrzędnej. to znaczy, że powinno istnieć dziedziczenie między wszystkimi nadrzędnymi kategoriami i podkategoriami. Na przykład:

Następnie coat w końcu ma 2 opcje color &size . sun glasses :color &shape . Kiedy oglądasz women fashion , jest tylko 1 opcja color . Filtruje również podkategorie, ponieważ dziedziczą one z women fashion .
Jeśli chodzi o wartości kolorów, moim pomysłem jest używanie tylko standardowych kolorów Strawberry Red jest w rzeczywistości red , Tangerine jest w rzeczywistości orange . Naprawdę nie chcesz, aby pojawiały się podczas filtrowania produktów. W przeciwnym razie byłoby zbyt wiele opcji, zdecydowanie nieprzyjemnych dla wygody użytkownika.
Jednak oprócz color opcja z kategorii, moja strona ma również coś, co nazywa się customizable options . Te opcje są zdefiniowane tylko na produktach. Nigdy nie pojawiają się podczas przeglądania kategorii. Tutaj możesz mieć Strawberry Red &Tangerine . Moim zdaniem nie są to „naturalne” właściwości produktu. Służą tylko do tego, aby użytkownik czuł się bardziej komfortowo podczas oglądania produktu. W ten sposób również możesz mieć takie opcje jak Tangerine with figure itp.
Jeszcze jedna rzecz o opcjach. możesz zaznaczyć, które opcje mają być używane do filtrowania produktów. Na przykład color jest zdecydowanie jednym. Podczas gdy dimension może nie być.

O rodzajach opcji. Twoje jest w porządku, jeśli ci to wystarczy. Mam o wiele więcej typów, takich jak Number , String , Single Choice , Multiple Choices . Planuję również zaimplementować Unit . Trudna część Unit czy to na przykład

1GB = 1024MB = 1024*1024B

Więc kiedy otrzymujesz dysk twardy o pojemności 1 GB i 1 TB, możesz chcieć dokonać konwersji przed filtrowaniem produktów. To nie jest tematem, wrócę do Twojego pytania.

Zauważ, że chociaż opcje różnych kategorii mają tę samą nazwę. Nie są prawdopodobnie tym samym. Material Coat i Furniture są 2 różne rzeczy. Dlatego staram się definiować różne opcje dla różnych kategorii. Dlatego może istnieć color dla toys i color dla women fashion . Nie jest to sprzeczne ze wspomnianym powyżej dziedziczeniem, ponieważ z pewnego poziomu podkategorie zaczynają dzielić te same opcje. Jest to całkowicie związane ze sposobem organizacji struktury kategorii. A jeśli chcesz kiedyś zmienić strukturę kategorii lub przenieść produkty, byłoby to bolesne. Zachowaj więc ostrożność podczas definiowania kategorii.

To wszystko, co przychodzi mi na myśl. Obawiam się, że nie jestem native speakerem, więc część mojej odpowiedzi może być trudna do zrozumienia. Daj mi znać.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Grupuj według sumy mongodb

  2. Jak zapisać tylko część daty z mangustą, a nie w formacie ISODate?

  3. Podstawowe zapytania między datami $gte, $lte itp

  4. Używanie mongodump:mongodump:nie znaleziono polecenia

  5. Nie można zaparzyć zainstalować mongodb na Mac OS 10.12