如何在NoSQL(MongoDB)中存储注释?

时间:2012-04-14 13:50:11

标签: mongodb nosql

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!"
}

哪种方式更好?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

方法1

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

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

方法2是RDMBS的方式,Mongo没有内置的连接,所以你需要在你的应用程序中完成它们。