ruby-on-rails - 嵌入或引用关系

标签 ruby-on-rails mongodb mongoid

我使用 mongodb 和 mongoid gem,我想得到一些建议。

我有一个应用程序,其中用户有许多市场,而市场有许多产品。 我需要在属于用户的所有(或任何)市场中搜索特定价格范围内的产品。

哪种关系更适合这种情况,嵌入关系还是引用关系?

我目前使用引用,看起来像这样

class User
  has_many :markets
end

class Market
  belongs_to :user
  has_many :products
end

class Product
  belongs_to :calendar
  belongs_to :user
end

对于搜索,我使用此查询

Product.where(user_id: current_user.id).
  in(market_id: marked_ids).
  where(:price.gte => price)

我很好奇,由于 mongdb 是一个面向文档的数据库,如果我在这种情况下使用嵌入式文档,我会在性能或设计上受益吗?

最佳答案

对于您的情况,我建议使用引用数据。因为我认为您需要单独操作每个集合(您需要能够通过 _id 编辑/删除/更新“产品”,并执行一些其他复杂的查询,当您有单独的集合时,这会更容易和有效收藏)。

同时,我会在用户集合中存储一些完整的嵌入数据,只是为了加快向访问者浏览器的显示速度。假设您有一个用户页面,您想要在其中显示用户的个人资料以及前 5 个市场和前 20 个产品。您可以将最新的前 5 名和前 20 名嵌入到用户的文档中,并在出现新市场/产品时更新这些嵌入的对象。在这种情况下 - 当您显示用户页面时,您只需对 MongoDB 进行 1 次查询。所以这可以作为缓存。如果访问者需要查看更多产品,他会转到下一页“产品”并在 MongoDB 中查询单独的“产品”集合。

关于ruby-on-rails - 嵌入或引用关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325346/

相关文章:

mongodb - 有没有多核利用NoSQL的系统?

javascript - Mongoose 自定义日期排序

ruby - Mongoid 还是 MongoMapper?

ruby-on-rails - 初始化的 Mongoid 重载

ruby-on-rails - rails/事件记录 : save changes to a model's associated collections

ruby-on-rails - 如何在 Ruby on Rails 中复制记录及其相关记录?

jquery - Fullcalendar Rails 可拖动/调整大小不起作用

ruby-on-rails - Rails 中的 Gemfile 依赖项

Mongodb 为每个组查找具有特定字段最大值(argmax)的文档

ruby-on-rails - 具有范围和belongs_to的Mongoid验证唯一性