在mongoDB上存储这些数据的最佳数据结构是什么?

时间:2014-06-01 03:45:10

标签: mongodb database-design

我正在设计一个新闻发布网站。我想让我的用户选择他们喜欢的新闻并将它们存储在列表中。每当用户想要显示他的收藏时,新闻应按日期排序并显示。

存储的结构目前是这样的:

favorite_table = 
{
    user_id,
    data
}

所有新闻都存储在数据字段中,如下所示:

[{date:news_id},{date:news_id},{date:news_id]  

由于所有值都按日期排序,因此存储新闻的结构是否良好?我必须在数据到达时附加数据。我的结构是否适合我的目的还是有更好的结构?

1 个答案:

答案 0 :(得分:1)

您的结构看起来正确。您只在数据字段中存储news_id,这是一个更智能的实现,因为每当用户将新消息添加到收藏夹时,存储完整文档将导致MongoDB进行大量移动和写入。

您可能已经知道的原因是每次更新都会创建一个新文档。参考:http://docs.mongodb.org/manual/reference/method/db.collection.save/#upsert

此外,我认为作为业务规则,您应该限制可以被用户设置为收藏的新闻项的数量。允许此列表无限增长对嵌入式设计来说不是一个好主意。

如果你想要无限数量的收藏夹,你最好为它创建一个单独的收藏,然后由用户获得所有收藏夹使用$ match(用户的ID)和$ sort(新闻条目) )聚合查询中的运算符,以获取用户喜欢的新闻项的排序列表。