我正在阅读 MongoDB,但仍然无法理解在什么情况下我应该更喜欢面向文档的数据库而不是 Postgres 等传统数据库。
考虑以下情况:我有一个博客,其中包含帖子,用户可以对帖子发表评论。所以我创建了两个集合:users
和posts
. 每个都post
包含一个嵌入式文档数组 - comments
,因此每次我post
从数据库加载一个,我都会自动获取所有comments
. 这很好,事实上,如果我确定关系不会改变,Mongo 似乎是一个更好的选择。但一切都会。
1. 断绝关系。
假设我将决定在他/她的个人资料页面上显示用户的评论。我将不得不在by上创建一个索引posts.comments.user_id
并从中选择。所以这与我在 RDBMS 中所做的基本相同。或者我将不得不复制所有内容并手动确保这两组在将来保持同步(在 Mongo 中没有触发器和没有事务)。posts
user._id
comments
posts
users
2.添加字段
现在我在帖子中添加了一个新字段,比如rating
我想要设置的那些已经存在的记录rating = number of comments
。但是我不能进行这种大规模更新。要么我为所有更新的文档( ) 设置相同的值,{ $set: {rating: 1} }
要么我必须手动逐个循环。
3. 制作报告
如何找到最活跃的用户?因为没有joins
- 首先,我必须提取顶部posts.comments.user_id
并将它们保存在某个地方。然后一次_id
一个并选择user.name
。这可以通过保持user.name
in来解决comment
。但是,如果以后我需要更多字段怎么办?
我的问题是什么?
我有什么问题吗?这三种情况似乎是对博客应用程序的简单扩展。如果我从一开始就不是 100% 确定关系和统计的结构,并且......(在 99% 的真实案例中)我不应该使用 Mongo?