MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Produkte, Optionen/Tags und Kategorien speichern, organisieren und abfragen

Ich betreibe auch eine E-Commerce-Website. Hier ist mein Rat, wie ich die von Ihnen erwähnten Funktionen implementiere. Hoffe es hilft.

  • Kategorien

Ich organisiere sie in einer flachen Struktur, in Ihrem Fall wäre es:

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

Und das Produkt muss jetzt nur noch in den Blattkategorien sein. In Ihrem Fall:

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

Das Produkt kann natürlich in mehreren Kategorien sein, also den categoryIds bleibt ein Array. Hier ist der knifflige Teil. Wenn Sie die Electronics auflisten Kategorie finden Sie alle Unterkategorien wie folgt:

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

idPath Index funktioniert hier, also wird es schnell gehen. Wenn Sie alle Unterkategorien herausgefunden haben, können Sie leicht alle darin enthaltenen Produkte finden (erstellen Sie einen Index auf den categoryIds von Product Sammlung).

Oder Sie können alternativ alle Kategorien in den Speicher einlesen und eine Hash-Tabelle mit key->categoryId, value->[all the subcategories] erstellen. Ihre Kategorien ändern sich normalerweise nicht häufig und Sie haben nicht viele Kategorien. Also wird es gut.

  • Tags/Optionen

Zunächst einmal denke ich, dass mit Ihrer Kategorie etwas nicht stimmt. Women fashion etwas generisches ist, sollten Sie Ihr Produkt in etwas Spezifischeres einordnen, und die Optionen sollten auch vorhanden sein. Beispielsweise könnte es eine Kategorie coat geben die die size hat &color , außer Women fashion . Während es noch color geben kann Option in Women fashion weil es ein gemeinsames Merkmal aller Unterkategorien ist.
Wenn Sie darüber nachdenken, warum sind alle Unterkategorien in einer übergeordneten Kategorie organisiert? weil sie etwas gemeinsam haben. Dieser gemeinsame Teil sollte die gemeinsamen Optionen der übergeordneten Kategorie sein. das heißt, es sollte eine Vererbung zwischen allen übergeordneten Kategorien und Unterkategorien geben. Zum Beispiel:

Dann coat hätte schließlich 2 Optionen color &size . sun glasses :color &shape . Wenn Sie sich Women fashion ansehen , es gibt nur 1 Option color . Es filtert auch die Unterkategorien, weil sie von Women fashion erben .
Was die Farbwerte betrifft, ist meine Idee, nur die Standardfarben Strawberry Red zu verwenden ist tatsächlich red , Tangerine ist eigentlich orange . Sie möchten nicht wirklich, dass sie angezeigt werden, wenn Sie die Produkte filtern. Sonst gäbe es zu viele Optionen, definitiv nicht gut für die Benutzererfahrung.
Allerdings außer color Option aus der Kategorie, meine Website hat auch etwas namens customizable options . Diese Optionen sind nur auf den Produkten definiert. Sie werden nie angezeigt, wenn Sie die Kategorie anzeigen. Hier können Sie Strawberry Red haben &Tangerine . Dies sind meiner Meinung nach keine „natürlichen“ Eigenschaften eines Produktes. Sie werden nur verwendet, damit sich der Benutzer beim Betrachten des Produkts wohler fühlt. Somit können Sie auch Optionen dieser Art wie Tangerine with figure haben etc.
Eine weitere Sache zu den Optionen. Sie können markieren, welche Optionen zum Filtern von Produkten verwendet werden sollen. Zum Beispiel color ist definitiv einer. Während dimension möglicherweise nicht.

Über Arten von Optionen. Deine sind in Ordnung, wenn es dir reicht. Ich habe viel mehr Typen wie Number , String , Single Choice , Multiple Choices . Ich plane auch die Implementierung der Unit . Kniffliger Teil von Unit ist das zum Beispiel

1GB = 1024MB = 1024*1024B

Wenn Sie also eine Festplatte mit 1 GB und 1 TB erhalten, möchten Sie möglicherweise eine Konvertierung durchführen, bevor Sie Produkte filtern. Dies ist vom Thema abgekommen. Ich komme auf Ihre Frage zurück.

Beachten Sie, dass die Optionen verschiedener Kategorien zwar denselben Namen haben. Sie sind wahrscheinlich nicht dasselbe. Material von coat und Furniture sind 2 verschiedene dinge. Daher neige ich dazu, verschiedene Optionen für verschiedene Kategorien zu definieren. Also gibt es vielleicht color für toys , und color für Women fashion . Dies steht nicht im Widerspruch zu der oben erwähnten Vererbung, da die Unterkategorien ab einer bestimmten Ebene beginnen, dieselben Optionen zu teilen. Dies hängt vollständig davon ab, wie Sie Ihre Kategoriestruktur organisieren. Und wenn Sie die Kategoriestruktur ändern oder Produkte irgendwann verschieben möchten, wäre dies schmerzhaft. Seien Sie also vorsichtig, wenn Sie Ihre Kategorien definieren.

Das ist alles, was mir in den Sinn kommt. Ich fürchte, ich bin kein englischer Muttersprachler, daher werden Sie einige Teile meiner Antwort möglicherweise schwer verstehen. Lassen Sie es mich gerne wissen.