2011-08-07 28 views
7

我已经浏览了mongo网站上的大多数mongodb模式设计文章以及这里的大多数问题。还有一个用例,我还没有弄清楚。在查看这些教程时,他们通常会参考文章评论问题和产品/类别问题。在查询帖子列表时,我想弄清楚如何建模一对多关系(作者到帖子)。下面是示例模式:如何在mongodb中设计作者/用户模型的模式

Users: { 
    _id: ObjectID 
    Name: String 
    Email: String 
} 

Posts: { 
    _id: ObjectID 
    user_id: ObjectID 
    body: String 
    comments: [ 
     body: String 
    ] 
} 

现在,让我们说你想运行最新的10个职位的查询。一个非常简单的查询,但是现在你有可能每个人都有唯一的ObjectID指向用户的帖子。现在,你应该如何完成获取每个用户的职位名称和电子邮件。

  1. 你应该建立用户的数组对象ID的从职位查询,然后运行查询db.users.find({_id:{$于:PostsUserIDArray}});在那之后你会使用你的应用程序逻辑来将正确的用户信息与正确的帖子进行匹配吗?

  2. 是否应该在帖子中保留一份数据。 I.E.将用户标识,姓名和电子邮件保留在帖子表中。然后,当用户更新这些信息以更新帖子中的所有信息时,只需要一个钩子。

  3. 一个我自己或朋友都没有想到的选项。

我感谢所有帮助,我试图总结我的周围蒙戈数据建模头。

回答

2

对于我从MongoDB创建者看到的一些视频,他们提倡第二种解决方案。如果你的用户有更多的数据,而不仅仅是一个名字和电子邮件,并且当你显示apost时只显示姓名和电子邮件,那么将它存储在帖子中并不是很糟糕。因此,在查询帖子时,您不必执行其他查询。而且由于用户通常不会每天更改自己的姓名,因此在更改姓名后对所有帖子运行更新会比显示帖子时执行其他查询以检索信息更有效。

编辑:链接到一个视频http://lacantine.ubicast.eu/videos/3-mongodb-deployment-strategies/

+0

谢谢,你有没有被关闭,机会所有这些视频的链接?我很想看一个他们谈论这个的地方。 – rickharrison

+0

我使用其中一个视频更新了我的帖子。 – TrexXx

+0

可能你应该考虑这篇文章 http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1 – olyjosh