NoSql文档结构

时间:2012-09-27 03:17:26

标签: mongodb

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

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

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

来自关系数据库我可能会有商店 - > BrandShops - >商店 - >销售等,但我只是尝试Mongo。感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

MongoDB中的引用可以是对象ID,DBRef's(许多驱动程序可以自动或半自动解析)或自定义唯一标识符,如名称或ID号。后者的优点是,您可以向用户显示相关文档的有意义的概述列表,而无需查询所有相关文档。不用说,该字段在引用的集合中应该具有唯一索引。您还可以将引用与引用对象的一些基本数据点组合,以便为用户提供更有意义的预览。