首页 > 解决方案 > 如何无限填充 mongoDB 模型?

问题描述

我正在尝试找到一种在 mongoDB 中无限填充的方法。我有一个 Posts 集合,其中包含一个对象 id 的评论数组。每个评论还有一个 childComment id 数组。我可以嵌套两个填充,但这个评论系统类似于 Reddit,因为可以有无限数量的嵌套评论。

router.get('/', (req, res) => {
  Post.find()
    .populate({
      path: 'postComments',
      populate: {
        path: 'commentComments'
      }
     })
    .sort({ date: -1 })
    .then(posts => res.json(posts))
    .catch(err => res.status(404)
      .json({ nopostsfound: 'No posts found'}));
});

我希望找到一种方法,让commentComments 的填充将继续为尽可能多的嵌套评论。非常感谢任何帮助!

标签: node.jsmongodbexpress

解决方案


这是一个固有的有问题的数据库模式。对模式的一些更改将使您的任务更容易。

不要在 Post 或 Comment 对象中存储评论 ID 数组。当数组变得非常大时,或者当许多客户端需要一次更新父对象时,这将导致问题。

相反,在每个 Comment 对象中,存储它所属的 Post 的 ID,以及它响应的 Comment(如果有)的 ID。然后,要加载帖子的评论,搜索属于该帖子的每个评论并对结果对象执行拓扑排序

与您所描述的架构相比,此架构具有许多主要优点-该架构与传统的关系数据库兼容,可以在单个查询中检索帖子的所有评论,并且可以通过单个插入查询添加新评论.


推荐阅读