Ich baue eine Personal-Shop-App, in der Nutzer Artikel verkaufen können, aber es fällt mir schwer, herauszufinden, wie man die Produkte verwaltet. Zum Beispiel, wenn Sie ein T-Shirt verkaufen möchten, sollten Sie in der Lage sein, eine Größe und Farbe usw. zu wählen, aber wenn Sie einen Computer verkaufen, sollten Sie das Jahr angeben, CPU-Leistung usw. Alle Produkte haben einen Titel, Preis, Bilder und so weiter, aber wie würdest du mit den unterschiedlichen Attributen auskommen? Ich benutze mongodb für die Objekte.
Ich habe über ein Feld attributes
nachgedacht, das ein Objekt mit den verschiedenen Details sein sollte, und dann ein have-Feld type
, das definieren würde, welche Eigenschaften existieren. Wenn type = 'Computer
, dann würde ich wissen, dass attributes
in etwa so aussehen würde.
usw.
In einem normalen objektorientierten Design hätte ich dies durch Vererbung / Schnittstellen getan. Wenn Sie eine Idee über den besten Ansatz dafür in mongoose / node.js haben, würde ich mich freuen, davon zu hören.
Wenn ich mir in der Frage nicht klar mache, sag mir bitte, was unklar ist und was geklärt werden soll
Bearbeiten:
Der folgende Artikel beschreibt eine Lösung für das Problem Ссылка
Es gibt jedoch nicht an, wo die Attribute abgelegt werden sollen. Eine Lösung könnte darin bestehen, sie nur in der Kategorie selbst zu speichern, aber ich bin mir hier nicht sicher über die besten Praktiken.
Eine einfache Möglichkeit zum Hinzufügen von Vererbung zu Ihren Mongoose-Schemas ist die Verwendung von Diskriminatoren . Auf diese Weise können Sie ein übergeordnetes Schema erstellen, das Attribute für alle Ihre Produkte wie Titel, Preis und Bilder speichern kann. Sie können dann untergeordnete Schemas erstellen, die Attribute enthalten, die für einen Produkttyp wie Elektronik und Kleidung spezifisch sind. Zum Beispiel können Sie im Elektronikschema Attribute für CPU und RAM hinzufügen, die im Kleidungsschema nicht vorhanden sind.
Hier ist ein grundlegendes Beispiel, wie ich dies mit Knoten und Mongoose eingerichtet habe.
Knoten / JavaScript
%Vor%Wenn Sie die Objekte protokollieren, die gespeichert werden, sollten sie aussehen wie
%Vor%Wenn Sie versuchen, auf Attribute zuzugreifen, die nicht im Produktschema enthalten sind, sollten Sie prüfen, ob das Attribut vorhanden ist, bevor Sie versuchen, darauf zuzugreifen.
Wenn Sie fragen, wie Sie sich dem Schema nähern, würde ich sagen, dass Sie Ihre Modellattribute zu einem Array von Objekten oder vom Typ mixed
machen Da Sie viele mögliche Optionen für Attribute haben können, ist es unmöglich, alle im Voraus zu kennen. Vielleicht möchten Sie, dass der Benutzer den Namen des Attributs (den Schlüssel) und auch den Wert definiert. Sobald Sie ein Objekt erhalten haben, können Sie eine for in
-Schleife verwenden, um den Schlüssel als Bezeichnung und den Wert zu verwenden.
Beispiel:
%Vor%Für dieses dynamische Datenszenario würde ich es vorziehen, Attribute als leeres Objekt im Mongoose-Modell zu behalten, damit Sie für jedes Dokument verschiedene Attribute verwenden können.
Modell
%Vor%Sie können das Attributobjekt verwenden, um die unterschiedlichen Attribute für das spezifische Produkt anzugeben.
Controller
%Vor%Referenz :
Ссылка (Suchen Sie nach dem gemischten Datentyp)
Hinweis :
Es gibt andere Möglichkeiten, dieses Schema zu erstellen. Eine Möglichkeit besteht darin, Attribute als eingebettetes Dokument mit allen Kombinationen von Attributen zu verwenden und den Wert als null zu behalten, wenn dies nicht zutrifft.
Hoffe, das hilft.
Tags und Links javascript node.js mongodb orm mongoose