微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 嵌入式文档vs mongoid中的hash数据类型

我找不到任何关于此的博客文章或文档.它们,嵌入式文档和散列数据类型都非常相似.每个人的利益或限制是什么?

考虑我的架构设计:

class HistoryTracker
  include ::Mongoid::Document
  include ::Mongoid::Timestamps

  field :modifier,type: Hash,default: {}
  field :original,default: {}
  field :modified,default: {}
  field :changeset,default: {}
end

我应该在这个HistoryTracker类中创建几个嵌入式文档吗?或者只是用它?索引怎么样?

解决方法

Mongoid在数据库级别以几乎相同的方式存储嵌入式文档和Hash属性.当使用mongoid在模型中声明你的字段时,这是正常的,所以如果你有一个嵌套结构,那么它就是创建嵌入式文档的常态.因为MongoDB是无模式的mongoid需要你声明字段,以便将它们呈现在与ActiveRecord相同的API中.但是对于某些用例,Hash属性为您提供了更多的灵活性.这种灵活性的缺点是您只能使用Hash API,因此您不会获得自动生成属性方法,也无法以通常在模型类中执行的方式封装业务逻辑.

例如,假设您有一个问卷调查模型,您需要在其中存储包含许多问答对的许多部分.如果系统的关键要求是管理员能够设置新的部分和问题,那么您将无法轻松地将答案建模为包含每个问题的显式字段的常规嵌入式文档.对于那种事情,哈希可能更有意义.

我不知道你的具体要求是什么,但作为一个粗略的指导我会说当你使用带有嵌入式文档的固定架构棒时,但是当你需要一个开放式模型时,请考虑Hash属性.

原文地址:https://www.jb51.cc/ruby/270282.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐