【问题标题】:mongodb and mongomappermongodb 和 mongomapper
【发布时间】:2010-06-22 23:19:43
【问题描述】:

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

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

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

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

我正在考虑拥有一个具有公共字段的产品模型,然后让类别模型继承自具有不同字段的产品模型。

这听起来正确吗?

问题也是我希望用户能够从应用程序中创建自己的类别和字段。例如,当用户创建具有速度和门数等字段的汽车类别时,我该如何做到这一点。然后我需要能够使用这些字段创建一个表单,以便输入未来的汽车。

任何人都可以帮助我的想法、指示或示例都会很棒。

提前非常感谢 瑞克

【问题讨论】:

  • 我无法对 Ruby 发表评论,但我想说我开始在 Windows 上使用带有 C# 驱动程序的 mongodb,并且我喜欢面向文档的数据库,因为架构是由数据推断的 -特别是我喜欢不必定义严格的关系(即 SQL),尽管两者都有自己的位置。 mongo 的 JavaScript 对象接口对于松散类型的灵活性来说是一个真正的好处。

标签: javascript ruby-on-rails ruby mongodb mongomapper


【解决方案1】:

好的,我不是 Ruby/Mongomapper 专家,所以我无法将其映射到“模型”中。但是,如果您从 Mongo 的角度来看,这就是您可能希望数据在 Mongo 中的显示方式。

收藏: 类别

{"_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"] }

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

每个子类别都有一个“字段”元素。 “字段”实际上是一对数组。这将使渲染变得容易。如果有人输入一辆老爷车,您查找“老爷车”类别,然后循环遍历“字段”以呈现相应的输入框。我使用了简单的东西,比如“整数”和“布尔值”,但你真的可以在这里放任何你想要的东西(“datepicker”、“checkbox”……)这完全取决于你。

现在产品本身基本上存储了对 Category 和 Sub-category 的引用。它还存储您输入的所有字段的值。

因此,产品拥有它需要的所有数据,这应该使每个产品都非常容易呈现。加载产品和适当的子类别,您将获得动态呈现页面所需的所有信息。

编辑

回复评论,Category中的“字段”可以用度量单位构建:

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

【讨论】:

  • 感谢盖茨副总裁的帮助。我还需要存储每个字段的单位,即汽车长度为 mm,汽车重量为 kg,revs = rpm 等任何想法如何将其纳入您的解决方案?非常感谢瑞克
  • 只需修改“类别”集合即可。我将“字段”变成了“对”(键值)数组。但是,您可以将其设为对象数组。我已经在底部更新了回复。
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2023-03-16
  • 2010-12-18
相关资源
最近更新 更多