sql >> Databáze >  >> NoSQL >> MongoDB

Ukládání, organizování a dotazování na produkty, možnosti/značky a kategorie

Provozuji také e-shop. Zde je moje rada, jak implementovat funkce, které jste zmínil. Doufám, že to pomůže.

  • Kategorie

Uspořádám je do ploché struktury, ve vašem případě by to bylo:

    {_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 nyní musí být pouze v kategoriích listů. Ve vašem případě:

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

Produkt může být samozřejmě ve více kategoriích, takže categoryIds zůstává pole. Tady je ta záludná část. Když uvedete Electronics kategorie, všechny její podkategorie naleznete podle:

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

idPath index zde funguje, takže to bude rychlé. když najdete všechny podkategorie, můžete snadno najít všechny produkty v nich (vytvořte index na categoryIds z Product kolekce).

Nebo můžete načíst všechny kategorie do paměti a vytvořit hashovací tabulku s klíčem->categoryId, hodnotou->[všechny podkategorie]. Vaše kategorie se obvykle nebudou často měnit a nebudete mít mnoho kategorií. Takže to bude v pořádku.

  • Značky/možnosti

Za prvé si myslím, že s vaší kategorií není něco v pořádku. Women fashion je něco obecného, ​​měli byste dát svůj produkt do něčeho konkrétnějšího a také by tam měly být možnosti. Například může existovat kategorie coat který má size &color , jiné než women fashion . I když stále může být color možnost v women fashion protože je to společná vlastnost všech podkategorií.
Pokud se nad tím zamyslíte, proč jsou všechny podkategorie uspořádány do jedné nadřazené kategorie? protože mají něco společného. Tou společnou částí by měly být společné možnosti nadřazené kategorie. to znamená, že by měla existovat dědičnost mezi všemi nadřazenými kategoriemi a podkategoriemi. Například:

Poté coat bude mít konečně 2 možnosti color &size . sun glasses :color &shape . Když si prohlížíte women fashion , existuje pouze 1 možnost color . Filtruje také podkategorie, protože přebírají z women fashion .
Pokud jde o hodnoty barev, můj nápad je použít pouze standardní barvy Strawberry Red je ve skutečnosti red , Tangerine je ve skutečnosti orange . Opravdu nechcete, aby se zobrazovaly při filtrování produktů. Jinak by tu bylo příliš mnoho možností, což rozhodně není dobré pro uživatelský dojem.
Kromě color možnost z kategorie, můj web má také něco, co se nazývá customizable options . Tyto možnosti jsou definovány pouze na produktech. Nikdy se nezobrazí při prohlížení kategorie. Zde můžete mít Strawberry Red &Tangerine . Podle mého názoru se nejedná o „přirozené“ vlastnosti produktu. Používají se pouze k tomu, aby se uživatel cítil pohodlněji při prohlížení produktu. Proto také můžete mít možnost tohoto druhu jako Tangerine with figure atd.
Ještě jedna věc k možnostem. možná budete chtít označit, které možnosti se mají použít pro filtrování produktů. Například color je určitě jeden. Zatímco dimension nemusí být.

O typech opcí. Tvoje jsou v pořádku, pokud ti to stačí. Mám mnohem více typů jako Number , String , Single Choice , Multiple Choices . Plánuji také implementovat Unit . Záludná část Unit je to například

1GB = 1024MB = 1024*1024B

Když tedy získáte pevný disk o kapacitě 1 GB a 1 TB, možná budete chtít před filtrováním produktů provést konverzi. Toto je mimo téma, vrátím se k vaší otázce.

Všimněte si, že ačkoli možnosti různých kategorií mají stejný název. Pravděpodobně nejsou totéž. Material z Coat a Furniture jsou 2 různé věci. Takže mám tendenci definovat různé možnosti pro různé kategorie. Tudíž možná color pro toys a color pro women fashion . To není v rozporu s výše zmíněnou dědičností, protože od určité úrovně začínají podkategorie sdílet stejné možnosti. To zcela souvisí s tím, jak organizujete strukturu kategorií. A pokud chcete změnit strukturu kategorií nebo přesunout produkty, bylo by to bolestivé. Při definování kategorií buďte opatrní.

To je vše, co mě napadá. Obávám se, že nejsem rodilý mluvčí angličtiny, takže některé části mé odpovědi mohou být těžko srozumitelné. Neváhejte a dejte mi vědět.




  1. Funguje vkládání více dokumentů do Meteor Collection stejně jako čistý mongodb?

  2. `pole nemohou být totožná:' ' a ' '` chyba mongoimportu

  3. MongoDB a velké datové sady při použití vzoru úložiště

  4. Mongodb:Nepodařilo se připojit k 127.0.0.1:27017, důvod:errno:10061