0

我有一个包含 3 个表的数据库:品牌(想想麦当劳)-> 商店-> 销售

每个店铺都有很多销售,每个品牌都有很多店铺。如果我想查询麦当劳有多少销售额来构建报告,我该如何构建我的品牌文档?我是否sales在品牌文档中保留一个字段,该字段在每个商店进行销售时都会更新,或者我sale在商店文档中保留一个字段,然后循环遍历所有商店以创建每个品牌的销售总和。

第一种方法可能在读取时表现更好,而第二种方法在写入时表现更好。我的数据库的读取次数多于写入次数(至少在开始时),所以我很想知道在 MongoDB 中执行此操作的标准方法是什么。

来自关系数据库,我可能会有 Shops -> BrandShops -> Shop -> Sales 等,但我只是在尝试 Mongo。谢谢。

4

1 回答 1

1

当您在 MongoDB 中具有一对多关系时,通常最好将数据嵌入到拥有的对象中,而不是使用数据库引用来表示关系。原因是 MongoDB 不支持连接 - 当您需要来自两个不同集合的数据时,您需要分别查询这两个集合。

当你有一个多对多的关系时,你应该使用引用数组而不是嵌入,因为否则你将不得不更新所有嵌入一个改变的对象的对象。

但请注意,MongoDB 中每个文档有 16MB 的限制。当具有嵌入对象的对象可能接近此限制时,您仍应使用引用(以拥有对象中的数组形式,或拥有对象中的字段的形式)。

MongoDB 中的引用可以是对象 ID、DBRef(许多驱动程序可以自动或半自动解析)或自定义唯一标识符,如名称或 ID 号。后者的优点是您可以向用户显示相关文档的有意义的概览列表,而无需全部查询。不用说,这个字段在引用的集合中应该有一个唯一的索引。您还可以将引用与被引用对象的一些基本数据点结合起来,以便能够向用户呈现更有意义的预览。

于 2012-09-27T09:23:09.277 回答