mongodb和mongomapper

我有一个rails应用程序,目前使用activerecord存储和查询产品。

每个产品都有一个类别和子类别,每个子类别由我可以在应用程序中创建的多个字段定义。 从此,当用户想要输入特定产品时,他们将与相关的表单字段一起呈现。

这已经变得非常复杂,自从听说过mongodb和mongomapper之后,我想或者希望我从一开始就使用mongomapper创建它!

问题是我想知道在mongodb中建模这个应用程序的最佳方法???

我正在考虑使用具有公共字段的procuct模型,然后让类别模型inheritance自具有不同字段的产品模型。

这听起来不错吗?

问题也在于我希望用户能够在应用程序内创建自己的类别和字段。 我怎么能这样做,例如当用户创建具有速度和门数等字段的汽车类别时。然后我需要能够使用这些字段创建表格以供将来的汽车输入。

任何人可以帮助我的想法,指针或例子都会很棒。

非常感谢rick

好的,我不是Ruby / Mongomapper专家,因此我无法将其映射到“模型”中。 但是,如果你从Mongo的角度来看这个,那么你可能希望数据在Mongo中看起来如何。

collections: 类别

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

系列产品

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

所以你在这里很简单。 您有一个包含所有类别和子类别的集合。 如果对象是“子类别”,则它将具有“父”字段集。 如果没有“父”字段,则该对象是“类别”。

每个子类别都有一个“fields”元素。 “fields”实际上是一对数组。 这样可以轻松渲染。 如果有人进入老爷车,你会查看“老爷车”类别,然后循环“字段”以呈现相应的输入框。 我使用了简单的东西,比如“整数”和“布尔”,但是你可以在这里放置任何你想要的东西(“datepicker”,“checkbox”,……)这完全取决于你。

现在,产品本身基本上存储了对类别和子类别的引用。 它还存储您输入的所有字段的值。

因此,产品具有所需的所有数据,这使得每个产品都很容易呈现。 加载产品和相应的子类别,您将获得动态呈现页面所需的所有信息。

编辑

在回复评论时, 类别中的“字段”可以使用度量单位构建:

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