如何解决mongodb 16m 文档限制的问题?

比如我要存一个论坛的所有帖子信息,那么帖子信息都是属于同一个mongodb document的,也就是属于同一个messages 表的。遇到这种问题应该怎么解决阿,不可能命名一个别的表吧?

阅读 1.6k
4 个回答

1.你可以用MongoDB GridFS 解决单个 doc 容量上限的问题:
官方文档:https://www.mongodb.com/docs/manual/core/gridfs/
2.你的这个问题可以通过把帖子和评论分别存储在不同的集合(而不是同一个文档中)来解决。
posts 的集合,用于存储论坛帖子:


{
  _id: ObjectId("xxxxxxxxxxxxxxxxxxxxxxxx"),
  title: "Post title",
  content: "Post content",
  author: "User123",
 
}

comments 的集合,用于存储评论:

{
  _id: ObjectId("yyyyyyyyyyyyyyyyyyyyyyyy"),
  postId: ObjectId("xxxxxxxxxxxxxxxxxxxxxxxx"), // 引用关联帖子的 _id
  content: "Comment content",
  author: "User456",
  
}

你可以用 MongoDB 的聚合框架 $lookup 来实现查询帖子和评论:。

db.posts.aggregate([
  {
    $match: { _id: ObjectId("xxxxxxxxxxxxxxxxxxxxxxxx") }
  },
  {
    $lookup: {
      from: "comments",
      localField: "_id",
      foreignField: "postId",
      as: "comments"
    }
  }
])

不太懂你的问题,不过即使是关系数据库,特别庞大的业务场景也要分库分表。

所以你的问题,我觉得就两种解法:

  1. 按逻辑拆分成多表
  2. 按时间、地域等拆分成多表

比如我要存一个论坛的所有帖子信息,那么帖子信息都是属于同一个mongodb document的,也就是属于同一个messages 表的。—— 过于愚蠢

帖子有帖子的表

评论有评论的表

通过“外键”建立一对多关系

别说什么 mongodb 没有外键,这里的外键加了引号

能,咋弄的我忘了,几年前弄过,几百个G数据

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏