关于MongoDB文档

时间:2013-07-07 19:51:20

标签: mongodb mongodb-.net-driver

我是NoSQL / MongoDB世界的新手,所以我正在试验几件事。

假设我想使用MongoDB创建一个博客。

我可以创建一个像这样的Blog帖子:

{
    Title: "My First Post",
    Body: "Bla de bla de bla bli bla de bah"
    Date: "07/07/2013" // or 06/07/2013 when using javascript date notation
}

然后我希望我的读者发表评论。我对读者了解的一件事是他们非常投入。他们在我的博文中写了数千条评论。

第一个问题: embed评论是一个好主意吗?或者,最好是将它们存储在自己的集合中,并引用博客文章ID?

这是另一个例子。假设我想创建一个像网站这样的社交媒体,它有几种不同类型的对象(即:博客文章,视频,联系人),人们可以对这些对象进行描述,以便他们可以评论和阅读其他人的评论。

评论Feed看起来像这样:

{
    Type:[either blog post,video or contact]
    Name:"Comments on this crazy video"
    SubscribedUsers:[userid1,userid2,userid3...userid999]
    Comments: {
        {
            Name:"Purple Dog",
            Date: "07/07/2013 09:12:23",
            Text: "Bla bla bla"
        },
        {
            Name:"Shizzly Feather",
            Date: "07/07/2013 09:23:08",
            Text: "I agree with Purple Dog."
        }
    }
}

(也许符号有点偏,但我希望你明白我的意思)

问题二: 以上示例对于像这样的网站来说是个好主意吗? MongoDB是否适合,或者我不应该将它用于这样的东西? (那么我应该使用什么?)或者是否有另一种方法来实现相同的结果(最后,我想向用户显示一个聚合的提要,其中所有注释按日期DESC排序,用于他们订阅的提要)

我正在努力学习(以及希望对其他人有用的东西)是何时选择MongoDB / NoSQL以及何时坚持使用RDBMS。

2 个答案:

答案 0 :(得分:0)

如果您使用的是MongodB,最好嵌入评论,因为评论与每个帖子密不可分 - 事实上,与帖子没有密切关系的评论可能被视为垃圾评论。当你要求说出与帖子相关的每条评论时,嵌入都会闪耀。当你要求说出过去6小时内任何人发表的评论时,嵌入很糟糕,但我想不出你为什么要问这样的事情:)

如果您将评论放在他们自己的表中,您会喜欢RDBMS,并且您会提出诸如“给我所有人在过去六小时内做出的所有评论”之类的问题。另一方面,当Julie C.(正确地)希望看到与她的帖子相关的所有评论并且你必须在“海报”表,“帖子”表和“评论”之间运行“加入”操作时,RDBMS很糟糕。表给她她期望的东西。

所以,选择你的毒药:)

答案 1 :(得分:0)

这是另一种称为分组策略的混合方法

http://www.slideshare.net/jrosoff/mongodb-advanced-schema-design-inboxes