8

1路

评论嵌入在 Post 文档中:

{
  "_id": ObjectId(12345),
  "title": "Cat ate elephant!",
  "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean convallis pretium vulputate.",
  "comments": [
    {"name": "Cat", "body": "MEOW!"},
    {"name": "Elephant", "body": "I was eaten by cat, lol!"},
    {"name": "Human", "body": "I am hungry!"}
  ]
}

2种方法

帖子和评论之间的关系(在单独的文档中)。帖子有很多评论:

// POST //
{
  "_id": ObjectId(12345),
  "title": "Cat ate elephant!"
  "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean convallis pretium vulputate."
}


// Comments //

{
  "_id": ObjectId(...),
  "post_id": ObjectId(12345),
  "name": "Cat",
  "body": "MEOW!"
}

{
  "_id": ObjectId(...),
  "post_id": ObjectId(12345),
  "name": "Elephant",
  "body": "I was eaten by cat, lol!"
}

{
  "_id": ObjectId(...),
  "post_id": ObjectId(12345),
  "name": "Human",
  "body": "I am hungry!"
}

哪种方式更好?

4

3 回答 3

3

第一种方式是首选,只要文档不是写繁重的。如果您要在一分钟内将 5000 条评论添加到帖子中,请使用第二种方法。

于 2012-04-14T14:06:11.190 回答
3

方法一

  • 无需加入 => 快速访问数据
  • NoSQL 的做法
  • 每条评论都只与该帖子相关,所以为什么不将它们存储在一起(您将标题和正文存储在一起;)

如果您有大于 15.5 兆字节的大型文档,并且收到大量评论,那么您可能需要将它们存储在其他地方。这是因为最大文档大小为 16 兆字节。

方法 2 是 RDMBS 的执行方式,Mongo 没有内置连接,因此您需要在应用程序中执行它们。

于 2012-04-14T14:08:16.503 回答
2

因为没有评论属于一个以上的帖子,所以将它们嵌入到 NoSQL 的 Post 文档中更有意义。因此,当您检索您的帖子时,您也会立即在 1 个查询中获得您的评论。

于 2012-04-14T14:01:52.427 回答