mongodb模式设计
我正在努力为一个应用程序找到最好的数据库设计。我有SQL背景,倾向于创建或多或少的非规范化数据库设计 我有以下问题。我有一个“文章”集合,包含大约2000篇文章。每篇文章都有相当多的信息。实现一个推荐系统,我想为每个“文章”与每个“用户”关联一个“预测”。 在SQL中,我将使用三个表对此进行建模:“Articles”、“Users”、“UserToArticle”。 查询应该如下:我想为每个“文章”关联当前登录用户的“PredictedRating”。在SQL中,我会在“Article”和“Users”之间建立一个连接,预先选择相应的用户。 拥有正确的索引非常快 我如何以mongo的方式实现这一点?当我以所描述的方式实现这一点时,我不得不为每一篇文章放置一个findOne()查询,这是非常低效和缓慢的(即使在使用索引时)mongodb模式设计,mongodb,database-schema,Mongodb,Database Schema,我正在努力为一个应用程序找到最好的数据库设计。我有SQL背景,倾向于创建或多或少的非规范化数据库设计 我有以下问题。我有一个“文章”集合,包含大约2000篇文章。每篇文章都有相当多的信息。实现一个推荐系统,我想为每个“文章”与每个“用户”关联一个“预测”。 在SQL中,我将使用三个表对此进行建模:“Articles”、“Users”、“UserToArticle”。 查询应该如下:我想为每个“文章”关联当前登录用户的“PredictedRating”。在SQL中,我会在“Article”和“Us
你有什么想法吗?重要的是,只发布当前用户的预测评分。经验法则 MongoDB博客有一些:
示例 我们需要将三个域对象放入MongoDB:用户、文章和预测评级。我假设有很多用户,甚至更多的文章。很明显,我们不应该将用户和文章放在一个集合中(项目符号2、4和5)。因此,我们只需要决定将预测评级放在哪里 将评级嵌入文章 由于您的用例是为一个用户获得所有预测的评分,因此将其放入文章(6)中会适得其反。您需要搜索所有文章以获得评级。此外,如果你删除了一个用户,你需要更新每一篇文章 将评级嵌入用户 将评级嵌入到用户中的优点是,您只需要一个查询即可获得用户和评级数据。但是您可能希望为每个用户的每一篇文章添加一个评级,因此数组将增长到更多(3) 将收视率放入自己的收藏中 因此,将评级放入他们自己的收藏中是可行的
{
_id: ObjectId("f01..."),
userId: ObjectId("123..."),
articleId: ObjectId("abc..."),
predictedRating: 5.4
}
如前所述,这取决于你的数量结构。如果你只有很少的用户或文章,那么嵌入预测的评分可能是一个更简单、更快的解决方案。不清楚你需要什么类型的查询。例如,一个用户的所有评分或一篇文章的所有评分或两者都有?好的观点:我需要一个用户的所有评分。