sql >> Base de Datos >  >> NoSQL >> MongoDB

mongodb y mongomapper

Bien, no soy un experto en Ruby/Mongomapper, así que no podré mapear esto en "modelos". Sin embargo, si observa esto desde la perspectiva de Mongo, así es como probablemente desee que se vean los datos en Mongo.

Colección: Categoría

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

Colección :Productos

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

Así que lo que tienes aquí es bastante simple. Tiene una colección que contiene todas las categorías y subcategorías. Si un objeto es una "Subcategoría", tendrá un campo "principal" establecido. Si no hay un campo "principal", entonces ese objeto es una "Categoría".

Cada subcategoría tiene un elemento de "campos". "campos" es en realidad una matriz de pares. Esto hará que sea fácil de renderizar. Si alguien ingresa un automóvil antiguo, busque la categoría "automóvil antiguo" y luego recorra los "campos" para mostrar los cuadros de entrada apropiados. Usé cosas simples como "entero" y "booleano", pero realmente puedes poner lo que quieras aquí ("selector de fechas", "casilla de verificación", ...) todo depende de ti.

Ahora, el producto en sí básicamente almacena una referencia tanto a la categoría como a la subcategoría. También almacena los valores de todos los campos que ha ingresado.

Entonces, el Producto tiene todos los datos que necesita, lo que debería hacer que cada producto sea bastante fácil de representar. Cargue el producto y la subcategoría adecuada y tendrá toda la información que necesita para representar dinámicamente la página.

EDITAR

En respuesta al comentario, los "campos" en Categoría se puede construir con una unidad de medida:

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