我使用 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/