我对nosql
世界很陌生。
如果我有一个非常简单webapp
users
身份验证&发布posts
,mongodb(nosql)
存储用户的方式是什么? nosql db
上的帖子?
我是否(如在relationnal databases
中)存储用户&在他自己的收藏中发布每一个?或者将它们存储在不同documents
的同一个集合中?或者,最后在他发布的每个帖子上使用redondant用户信息(凭据)?
答案 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数组即可。如果不止如此,请使用Horizon_Net提供的答案。
阅读这篇文章,您将对要做的事情有一个很好的了解。祝你好运!