Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mongoDB上存储这些数据的最佳数据结构是什么?_Mongodb_Database Design - Fatal编程技术网

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

在mongoDB上存储这些数据的最佳数据结构是什么?,mongodb,database-design,Mongodb,Database Design,我正在设计一个新闻发布网站。我希望允许我的用户选择他们最喜欢的新闻并将其存储在列表中。每当用户想要显示他的收藏夹时,新闻都应该按日期排序并显示 当前要存储的结构如下所示: favorite_table = { user_id, data } [{date:news_id},{date:news_id},{date:news_id] 所有新闻都存储在数据字段中,如下所示: favorite_table = { user_id, data } [{dat

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

当前要存储的结构如下所示:

favorite_table = 
{
    user_id,
    data
}
[{date:news_id},{date:news_id},{date:news_id]  
所有新闻都存储在数据字段中,如下所示:

favorite_table = 
{
    user_id,
    data
}
[{date:news_id},{date:news_id},{date:news_id]  

因为所有的值都是按日期排序的,所以它是存储新闻的好结构吗?每当数据到达时,我必须附加数据。我的结构适合我的目的还是有更好的结构?

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

原因是,您可能已经知道,每次更新都会创建一个新文档。参考文献:

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


如果您想要无限数量的收藏夹,最好为其创建一个单独的集合,然后由用户在聚合查询中使用$match(在用户id上)和$sort(新闻项)操作符获取所有收藏夹,以便为用户获取收藏夹新闻项的排序列表。

非常感谢您的信息!你知道任何关于MongoDB数据库设计架构的教程吗?实际上我从头到尾都在阅读MongoDB手册。但是你可以阅读这部分文档:我知道有一些付费教程。它们不仅是关于设计模式的,而且是有帮助的。它们可以在Pluralsight上获得:如果你无法获得订阅,如果在你的国家安全的话,也许可以尝试将它们发送给Torrent。