2014-10-30 106 views
0

刚刚开始使用MongoDB。我有收集称为用户,菜肴,餐馆和评级。我需要将评分映射到特定的菜肴和用户。MongoDB中的关系查询

Users 
{ 
_id: "12323421", 
name: "John Doe", 
... 
} 

Dishes 
{ 
_id: "9872983749", 
name: "Apple Pie", 
restaurantID: "3432452" //Corresponds to Patisserie 
... 
} 

Restaurants 
{ 
_id: "3432452", 
name: "Patisserie", 
... 
} 

Ratings 
{ 
_id: "74766575", 
userID: "12323421", //Corresponds to John Doe 
dishID: "9872983749", //Corresponds to Apple Pie 
rating: 5 
} 

我不知道如何去产生像几个疑问:菜有至少10个评级,或

  • 餐厅,其菜品 已收到10个评级
    • 名单

      这在SQL环境中很容易实现,但是如何在MongoDB中使用联接或嵌套查询?

    回答

    2

    MongoDB本身不支持连接或子查询。

    我建议你退后一步,阅读一下MongoDB模式设计。 MongoDB文档的Data Modeling Concepts部分是一个很好的开始。该主题还有很多其他资源。 O'Reilly的书MongoDB应用设计模式也是一个很好的资源。

    如果您以类似的方式在RDBMS中建模您的数据,那么您将自行设置失败。

    并不总是有一个明确的“正确”或“最佳”方法来模拟特定问题。它将始终取决于您的应用程序的特定访问模式和要求。

    正如您在评论中提到的,一种方法是将特定菜肴的评分嵌入到Dish集合中。但是,如果您有大量的评级(无限增长不好),这就会产生问题。这里常见的方法通常是混合型。例如,您可以嵌入特定菜肴的最受欢迎或最新评分,并将其他评分存储在单独的集合中。再次,考虑应用程序将如何呈现数据并尝试相应地建模数据。

    +0

    谢谢你的回应。我知道使用MongoDB进行建模违反了在学习RDBMS时钻入我们的概念,而这已被证明是相当迷惑和解放的。 – ZeMoon 2014-10-30 13:40:33

    +0

    在上述'模式'的情况下,我可以很容易地将收视率嵌入到收藏本身内,但是这对于何时可能存在大量收视率会造成问题。 – ZeMoon 2014-10-30 13:44:27

    +0

    好吧,创建模型时的方法是自上而下(应用程序如何使用数据)而不是自下而上(以最正常化的方式表示数据)... – ZeMoon 2014-10-30 13:57:00