2

起初,我认为无需在模型中定义对象就可以向对象添加某些内容非常酷。但是现在我无法想象它是如何在像 Ruby on Rails 应用程序这样的 Web 应用程序中使用的。哪些用例需要动态字段,用户界面如何允许用户定义这些动态字段?您是否让用户设置动态字段的键(使用文本框或其他东西)?你们中的任何人都知道任何演示都是展示动态字段真正有用性的一般应用程序吗?此外,如果您打算阅读这些动态字段,您是否不需要read_attribute(在 RoR 的情况下)已经提前计划好的“动态”字段的名称?

我问这个问题是因为我在学校有一个任务是围绕 PostgreSQL 和 NoSQL 数据库(我选择 MongoDB)包装一个应用程序。我已经成功地做到了这一点,但是,我添加到我在 MongoDB 端定义的任何对象的每个属性都已经在模型中定义了。我想表明我知道这种能力,但我想不出任何理由使用动态字段,也找不到搜索结果,“mongodb 中动态字段的目的”或“动态字段” mongodb 演示”。

谢谢!

4

2 回答 2

2

首先,“动态字段”是一个Mongoid 概念,而 Mongoid 只是一个将 ruby​​ 对象映射到 MongoDB 文档中的 ODM。MongoDB 没有也不需要动态字段的概念,因为它是无模式的。尽管这在理论上意味着集合中的每个文档都可以具有不同的结构,但这绝不是 MongoDB 的实际应用。

诸如 Mongoid 之类的 ODM 提供了一种有用的机制来在应用程序级别而不是在数据库本身中定义模式。在这种情况下,动态字段有两大好处。

  1. 添加具有不同结构的子文档的能力。例如,您可以拥有一个 Animals 集合。每种动物可能有不同的身体部位。但在 MongoDB 中,我不需要仅仅因为某些动物有“象牙”列。
  2. 无需接触数据库即可更改架构的能力。通过额外的“列”向数据库添加功能是很常见的。使用 Mongoid/MondoDB,这可以在应用程序代码中发生,就像更改应用程序类一样容易——相对于数据库完全透明。
于 2014-04-08T05:03:59.763 回答
0

我认为你在询问/寻找这个问题的答案时采取了错误的方法,在我看来,最好的答案将来自源代码,这是来自 MongoDB 博客的帖子,我希望它会对你有所帮助。

http://blog.mongodb.org/post/119945109/why-schemaless

于 2014-04-08T01:45:11.983 回答