我使用 mongodb 和 mongoid gem,我想得到一些建议。
我有一个应用程序,其中用户has many
市场与市场has many
产品。
我需要在属于用户的所有(或任何)市场中搜索特定价格范围内的产品。
哪种关系更适合这种情况,嵌入关系还是引用关系?
我目前使用引用,看起来像这样
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)
我很好奇,由于 mongodb 是一个面向文档的数据库,如果我在这种情况下使用嵌入式文档,我会在性能或设计上受益吗?
对于您的情况,我建议使用参考数据。因为我认为您需要单独操作每个集合(您需要能够通过 _id 编辑/删除/更新“产品”,并执行一些其他复杂的查询,当您有单独的集合时,这会更容易和有效收藏)。
同时我会存储some用户集合中的完整嵌入数据,只是为了加快向访问者浏览器的显示速度。假设您有一个用户页面,您想要在其中显示用户的个人资料以及前 5 个市场和前 20 个产品。您可以将最新的前 5 名和前 20 名嵌入到用户的文档中,并在出现新市场/产品时更新这些嵌入的对象。在这种情况下 - 当您显示用户页面时,您只需对 MongoDB 进行 1 次查询。所以这可以作为缓存。如果访问者需要查看更多产品,他会转到下一页“产品”并在 MongoDB 中查询单独的“产品”集合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)