mongodb关联数据的设计

本文探讨了从MySQL思维向MongoDB思维转变的过程,特别是在一个使用React前端和Node.js后端的小项目中,如何优化帖子列表接口的性能。通过将作者信息直接存储在帖子集合中,避免了多次查询,显著提高了查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  之前接触的都是MySQL这种关系型数据库的设计,很多数据库方面的思维已经被结构化查询语言束缚了。
  最近在写一个类似论坛的一个小项目,前端用的是React,后端用node.js和mongodb。在写获取发帖列表接口的时候,需求是获取一个帖子数组,每个数组成员就是一个帖子对象,帖子对象里包括文章标题、文章内容,同时还有发帖的作者。而作者我原本存的是一个id,取自user集合。原本的思路是在查询的时候再通过作者id去user集合中找到作者的姓名和头像,但在mongodb中,这需要在paper集合进行find操作后,再写一个for循环,有多少帖子就要去user集合查多少次id。这种操作方法,显然性能会非常差,想想都觉得恐怖。
  通过id去另外一个表里查详细数据,这是典型的MySQL查询的思路,我在网上查了很久,mongodb貌似天生就不支持这种关联查询,实现起来都要绕很大的弯子。
  最后,我想明白一个事情,作者的姓名和头像就应该直接存在paper集合中,在存单条帖子的时候,就直接存进去,这样取的时候只做一次find查询,那性能将是非常棒的。
  查询的性能提升了,但其他方面就要多花费一些。首先是数据出现了冗余,作者的姓名在user集合和paper集合中重复出现,并在paper集合中重复多次,mongodb实际上是在拿空间换时间。其次,数据维护更复杂,当要修改作者姓名时,要做得操作就非常多了,不过,在数据库的增删改查中,查的操作是最频繁的。改的操作并不是那么频繁,而且对性能的要求也并不高。
  综上所述,mongodb这种在一个集合中存储所有所需数据的方法是可取的,于是我决定直接在帖子集合中存作者信息,这样一来,很多问题就迎刃而解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值