MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mongodb e mongomapper


OK, eu não sou um especialista em Ruby/Mongomapper, então não poderei mapear isso em "modelos". No entanto, se você olhar para isso da perspectiva do Mongo, veja como você provavelmente deseja que os dados apareçam no Mongo.

Coleção: Categoria
{"_id" : "car"}
{"_id" : "vintage_car", "parent" : "car", "fields" : ["year" : "integer", "original_parts" : "boolean", "upgrades" : "text"] }

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

Então o que você tem aqui é bem simples. Você tem uma coleção que contém todas as categorias e subcategorias. Se um objeto for uma "Subcategoria", ele terá um campo "pai" definido. Se não houver um campo "pai", esse objeto será uma "Categoria".

Cada subcategoria tem um elemento "campos". "campos" é na verdade uma matriz de pares. Isso facilitará a renderização. Se alguém entrar em um carro antigo, você procura a categoria "carro vintage" e, em seguida, percorre os "campos" para renderizar as caixas de entrada apropriadas. Eu usei coisas simples como "integer" e "boolean", mas você pode realmente colocar o que quiser aqui ("datepicker", "checkbox", ...) tudo depende de você.

Agora, o próprio produto basicamente armazena uma referência tanto para a Categoria quanto para a Subcategoria. Ele também armazena os valores de todos os campos que você inseriu.

Portanto, o Produto tem todos os dados de que precisa, o que deve facilitar a renderização de cada produto. Carregue o Produto e a Subcategoria apropriada e você terá todas as informações necessárias para renderizar a página dinamicamente.

EDITAR

Em resposta ao comentário, os "campos" em Categoria pode ser construído com uma unidade de medida:

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