mongodb关联数据的设计

  之前接触的都是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这种在一个集合中存储所有所需数据的方法是可取的,于是我决定直接在帖子集合中存作者信息,这样一来,很多问题就迎刃而解了。

你可能感兴趣的:(node后端)