【问题标题】:What is the purpose of dynamic fields in MongoDB? [closed]MongoDB中动态字段的目的是什么? [关闭]
【发布时间】:2014-04-08 00:08:51
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 什么是动态字段? MongoDB 是无模式的,因此您可以随时添加字段。在某些应用程序中,对于具有预定义的应用程序,添加新字段可能没有意义(同样,无需调整架构)。
  • 我想知道为什么他们提供向没有定义该字段的模型添加字段的能力。那有意义吗?我知道您可以动态添加字段。我想知道模型定义中没有出现的真正动态字段
  • 也许一个“动态字段”的例子可以帮助澄清事情。
  • 好吧,因为这本质上是我的问题。我真的很想知道是什么用例说服了开发这种类型数据库的人想要提供这种功能:在任何给定类型的任何给定时间添加任何类型的任何字段的能力。当然,当可伸缩性是一个问题时,它比这更复杂。我只是想了解 MongoDB 的这一特殊方面。

标签: mongodb ruby-on-rails-4 mongoid dynamic-attributes


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,现在课堂上正在讨论的内容确实如此。感谢您的解释。我想我的问题实际上是关于应用程序做什么或需要做什么,它需要 MongoDB 数据库以关系数据库无法执行的方式存储信息。当您拥有无模式数据库时,应用程序的用户界面如何变化?我习惯了一个应用程序,本质上是一个需要重复指定相同属性的表单集合。什么类型的应用程序要求使用 MongoDB 代替 PostgreSQL?
  • 我认为docs.mongodb.org/ecosystem/use-cases 是很好的例子。特别是我已经广泛使用“产品数据”用例。在这种情况下,数据非常适合 MongoDB,因为数据项复杂且变化多端,而且数据项的关系要求相当简单。
【解决方案2】:

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

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

【讨论】:

  • 谢谢,但我认为您误解了我的问题。对于敏捷开发目的(避免大规模场景中的麻烦迁移),我确实对无模式数据库的优缺点有相当好的理解。我的问题实际上是关于允许将动态字段添加到以前未定义的模型的重要性。如果您不知道如何引用以前的内容,您如何提前构建视图?
  • 如果用户可以在任何时候添加任何类型的任何东西,你如何准备呢?我的模型已经定义了字段。但是如何开发我的应用程序以允许用户在运行时定义自己的字段?哪些类型的用例需要这样做?
  • 是的,我可能没有正确回答您的问题,似乎 mjhm 已经在评论中为您提供了 mongo doc 用例,以便一切都清楚。
  • 很抱歉不清楚。无论如何感谢您的帮助!
猜你喜欢
  • 2012-06-18
  • 2021-12-26
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2020-01-06
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多