2014-10-30 103 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