当前位置: 首页 > 知识库问答 >
问题:

NoSql文档结构

沈骞仕
2023-03-14

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

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

第一种方法可能在读操作上表现得更好,而第二种方法在写操作上表现得更好。我的数据库将会有更多的读数而不是写数(至少在开始的时候),所以我很有兴趣了解在MongoDB中实现这一点的标准方法是什么。

来自一个关系数据库,我可能会有商店->BrandShops->Shop->Sales等,但我只是在试用Mongo。多谢了。

共有1个答案

樊运乾
2023-03-14

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

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

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

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

 类似资料:
  • 问题内容: 您将如何构建Cloud Firestore数据库。 我收藏了团队,竞技场和游戏: 在游戏中,团队可以是主队也可以是客队,而游戏始终具有竞技场。 因此,目前我的想法是将所有比赛都纳入“游戏”收藏夹,当我想查找某个团队的所有游戏时,我需要查询“游戏”收藏夹并查找所有选定球队是主队还是客队的比赛。 我应该在Firestore生成的ID处引用团队吗?还是应该输入团队名称?我可以从中获得更多关于

  • 本文向大家介绍NoSQL反模式 - 文档数据库篇,包括了NoSQL反模式 - 文档数据库篇的使用技巧和注意事项,需要的朋友参考一下 我们设计关系数据库Schema的都有一套完整的方案,而NoSQL却没有这些。半年前笔者读了本《SQL反模式》的书,觉得非常好。就开始留意,对于NoSQL是否也有反模式?好的反模式可以在我们设计Schema告诉哪里是陷阱和悬崖。NoSQL宣传的时候往往宣称是Schema

  • 如前所述,WSDL 2.0使用层组件来定义Web服务:类型,操作,接口,绑定,端点和服务。 WSDL 2.0这层组件按照以下规则编写在XML文档中: 是根元素。 是顶级元素,用作表示组件的容器。 是顶级元素,用作表示组件的定义,该组件包含一组操作组件。 是顶级元素,用作表示组件的定义。 是顶级元素,用作表示组件的定义,该组件包含一组组件。 WSDL 2.0 XML文档的结构可以表示为:

  • 之前我们讨论的都是HTML文档中的片段,除了这些局部语法外,一个合法的HTML文档还有整体性的结构要求。 文档类型(Doctype) 首先需要定义文档的类型:Doctype。 我们可以把Doctype看成HTML语言的版本,就好比Word97和Word2001一样。不同版本之间的语法约定不尽相同,但通常会保持向下兼容,好比Word2001能打开Word97的文档一样。 以前XHTML 1.0 和

  • “文档结构视图”功能,可以通过jQuery的动画来模拟。该功能与Word保持一致,默认情况下,目录可见。当用户点击“文档结构视图”后,隐藏目录,再次点击后,显示目录。 首先,在文章的页眉上,增加“文档结构视图”复选框,供用户点击。复选框被包含在一个label中,并为label增加id属性,以便jQuery能够根据id来捕获用户点击事件。同理,也要为复选框增加id属性,以便用户点击后,jQuery能

  • 我正在尝试使用 fabric3 将文档上传到我们的服务器,我已经注释了我的接口方法 但是,当我在 fabric3 下部署时,我得到一个例外。我看到了一个类似问题的答案,泽西岛2注入源的多部分表单数据),所以我想我必须做类似的事情。但是,我找不到有关如何使用 fabric3 执行此操作的任何信息。有人有什么想法吗?谢谢