MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb et mongomapper

OK, je ne suis pas un expert Ruby/Mongomapper, donc je ne pourrai pas mapper cela en "modèles". Cependant, si vous regardez cela du point de vue de Mongo, voici à quoi vous voulez probablement que les données ressemblent dans Mongo.

Collecte : Catégorie

{"_id" : "car"}
{"_id" : "vintage_car", "parent" : "car", "fields" : ["year" : "integer", "original_parts" : "boolean", "upgrades" : "text"] }

Collection  :Produits

{"_id" : "1234", "name" : "Model-T", "category" : "car", "sub-category" : "vintage_car", "values" : ["year" : 1942, "original_parts" : false, "upgrades : "XM Radio"] }

Donc, ce que vous avez ici est assez simple. Vous avez une collection qui contient toutes les catégories et sous-catégories. Si un objet est une « sous-catégorie », il aura un ensemble de champs « parent ». S'il n'y a pas de champ "parent", alors cet objet est une "Catégorie".

Chaque sous-catégorie a un élément "champs". "fields" est en fait un tableau de paires. Cela facilitera le rendu. Si quelqu'un entre dans une voiture de collection, vous recherchez la catégorie "voiture de collection", puis parcourez les "champs" pour afficher les zones de saisie appropriées. J'ai utilisé des choses simples comme "integer" et "boolean", mais vous pouvez vraiment mettre ce que vous voulez ici ("datepicker", "checkbox", ...) tout dépend de vous.

Maintenant, le produit lui-même stocke essentiellement une référence à la fois à la catégorie et à la sous-catégorie. Il stocke également les valeurs de tous les champs que vous avez saisis.

Ainsi, le produit dispose de toutes les données dont il a besoin, ce qui devrait rendre chaque produit assez facile à rendre. Chargez le produit et la sous-catégorie appropriée et vous aurez toutes les informations dont vous avez besoin pour afficher dynamiquement la page.

MODIFIER

En réponse au commentaire, les "champs" dans Catégorie peut être construit avec une unité de mesure :

..."fields" : [{"length","meters","float"},{"weight","kg","float"},...]