MongoDb - 建模用户存储&发布在webapp中

时间:2014-01-28 22:19:32

标签: mongodb uml nosql

我对nosql世界很陌生。

如果我有一个非常简单webapp users身份验证&发布postsmongodb(nosql)存储用户的方式是什么? nosql db上的帖子?

我是否(如在relationnal databases中)存储用户&在他自己的收藏中发布每一个?或者将它们存储在不同documents的同一个集合中?或者,最后在他发布的每个帖子上使用redondant用户信息(凭据)?

3 个答案:

答案 0 :(得分:1)

在建模nosql数据库时,你应该考虑3个基本思路

<强> Desnormalization

在多个文档上复制相同的数据。为了简化/优化查询处理或使用户的数据适合特定的数据模型

<强>聚合

将数据嵌入到文档中(例如博客文章和内容),以便影响性能和一致性方面的更新,因为mongo在时间上具有一个文档一致性

申请级别加入

创建应用程序级别联接时,如果不善于收集信息(例如,每个帖子作为相关文档将非常糟糕,因为我们需要使用相同的资源)

回答您的问题 创建两个文档一个是blogPost,包含所有注释,标签和用户ui。第二个用户包含所有用户信息。

答案 1 :(得分:1)

你可以这样做的方法是使用两个集合,一个帖子集合和一个作者集合。它们可能如下所示:

<强>帖子

{
  title: "Post title",
  body: "Content of the post",
  author: "author_id",
  date: "...",
  comments: [
    {
      name: "name of the commenter",
      email: "...",
      comment: "..."
    }],
  tags: [
    "tag1", "tag2, "tag3
  ]
}

<强>作者

{
  "_id": "author_id",
  "password": "..."
}

当然,你可以将它放在一个集合中,但@jcrade提到了你应该/应该使用两个集合的原因。记住,那是NoSQL。您应该从应用程序点设计数据库,这意味着要问自己哪些数据被消耗以及如何使用。

答案 2 :(得分:0)

这则文章说明了一切: https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1

这实际上取决于您的应用程序,以及您希望用户拥有的帖子数量:如果是一对一关系,那么可能会使用嵌入式文档(在用户模型内部)才是可行的方法。如果是一对多(最多几千个),则只需在用户模型中嵌入ID数组即可。如果不止如此,请使用Horizo​​n_Net提供的答案。

阅读这篇文章,您将对要做的事情有一个很好的了解。祝你好运!