我正在浏览新闻纸网站。
该网站包含文章,其中包含标题,部分文字,时间戳,作者和评论部分。
评论部分包含来自不同注册用户的评论,他们可以评论文章,评论评论和回复其他评论。
我正在使用MongoDB(初学者),我的问题是JSON对象中的内容。
例如,每篇新闻文章都是单个对象,其中包含所有用户评论。或者将每个文本/评论作为自己的对象更具可读性。
{"article": {
"id": "title of article",
"text": "text of article",
"author": "author of article",
"date": "date",
"comment_section": {
"user": "username",
"text": "text from comment",
"upvotes": int,
},
}}
或类似的东西:
{"text": {
"text_type": "article text or comment",
"text": "text of article or comment",
"date": "date",
"author": "author of article or comment author",
"upvotes": int,
}}
第一个例子的对象数量较少,但其中有很多东西,后者有很多对象,但不包含很多数据。
感谢。
答案 0 :(得分:0)
json的全部功能在于它是一棵树,因此单个文档可以包含其中的所有数据。您可以在子文档和投影上添加索引,以仅查询文档的必要部分。
但是,如果您希望有大量的评论部分,嵌入式评论可能会成为问题,因为mongodb必须阅读整个文档,在评论列表中添加新评论并将其写回。
理想情况下,你需要一个中间解决方案:保持嵌入的注释,直到少于20-50(也与文章和“下一个注释”按钮一起呈现),然后切换到保持传入提取的评论集合中的评论。这样,您可以使用单个mongo查询呈现您的文章,有效地为每个用户交互创建一个mongo查询 - 这是数据库设计的首选方式。
使用mongo,您将始终必须利用对象大小+更新量与将数据提取到外部集合以及对其进行额外查询的成本。