我找不到任何关于此的博客文章或文档。它们都是嵌入式文档和散列数据类型,非常相似。各自的优势或限制是什么?
考虑一下我的架构设计:
class HistoryTracker
include ::Mongoid::Document
include ::Mongoid::Timestamps
field :modifier, type: Hash, default: {}
field :original, type: Hash, default: {}
field :modified, type: Hash, default: {}
field :changeset, type: Hash, default: {}
end
我应该在这个 HistoryTracker 类中创建几个嵌入式文档吗?或者只是使用它?索引怎么样?
最佳答案
Mongoid 在数据库级别以几乎相同的方式存储嵌入式文档和 Hash 属性。使用 mongoid 在模型中声明字段时这是正常的,因此如果您有嵌套结构,则创建嵌入式文档是正常的。因为 MongoDB 是无模式的 mongoid 需要您声明字段才能以与 ActiveRecord 相同的 API 呈现它们。但对于某些用例,Hash 属性为您提供了更多的灵 active 。这种灵 active 的缺点是您受限于 Hash API,因此您无法获得自动生成的属性方法,并且您无法像通常在模型类中那样封装业务逻辑。
例如,假设您有一个问卷模型,您需要在其中存储许多包含许多问答对的部分。如果系统的关键要求是管理员能够设置新的部分和问题,那么您将无法轻松地将答案建模为包含每个问题的明确字段的常规嵌入式文档。对于这种事情,哈希可能更有意义。
我不知道您的具体要求是什么,但作为粗略的指导,我会说,当您使用带有嵌入式文档的固定模式时,但当您需要开放式模型时,请考虑哈希属性。
关于ruby - mongoid 中的嵌入式文档与哈希数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15515053/