如何在mongoDB中构建JSON数据?

时间:2017-01-19 10:40:20

标签: json mongodb database-design

我正在浏览新闻纸网站。

该网站包含文章,其中包含标题,部分文字,时间戳,作者和评论部分。

评论部分包含来自不同注册用户的评论,他们可以评论文章,评论评论和回复其他评论。

我正在使用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,
}}

第一个例子的对象数量较少,但其中有很多东西,后者有很多对象,但不包含很多数据。

感谢。

1 个答案:

答案 0 :(得分:0)

json的全部功能在于它是一棵树,因此单个文档可以包含其中的所有数据。您可以在子文档和投影上添加索引,以仅查询文档的必要部分。

但是,如果您希望有大量的评论部分,嵌入式评论可能会成为问题,因为mongodb必须阅读整个文档,在评论列表中添加新评论并将其写回。

理想情况下,你需要一个中间解决方案:保持嵌入的注释,直到少于20-50(也与文章和“下一个注释”按钮一起呈现),然后切换到保持传入提取的评论集合中的评论。这样,您可以使用单个mongo查询呈现您的文章,有效地为每个用户交互创建一个mongo查询 - 这是数据库设计的首选方式。

使用mongo,您将始终必须利用对象大小+更新量与将数据提取到外部集合以及对其进行额外查询的成本。