2017-08-08 87 views
0

我對Mongo很陌生,我試圖理解我是如何在不同的表/集合之間建立關係的。MongoDB關係vs SQL

例如USER和他的POST(s)之間的關係。在SQL中,我將創建兩個表併爲每個帖子提供USER的USERID。

我該怎麼去做這個在Mongo中?我可以製作2個單獨收藏品,其中一個用於用戶,另一個用於發佈帖子。或者我嵌入帖子裏面的用戶集合像this

謝謝!

回答

0

這一切都取決於你的具體情況,最重要的是你的使用模式(最終你的查詢)。

  • 如果你通常會涉及用戶在應用程序和崗位的一個區域在另一個然後將它們分成兩個集合肯定是(只)正確的方式。

  • 如果您總是需要查看「來自用戶上下文」的帖子,那麼合併帖子到用戶文檔是一種有效的方法。儘管如此,請注意16MB的文檔限制。因此,如果用戶在某個時候擁有超過16MB的帖子,那麼您有一個問題需要您進行大規模改變。

  • 如果您的應用程序通常關注帖子,但也需要顯示例如一個特定的帖子的用戶名,那麼你也可以保持用戶數據與帖子分開,但將用戶名存儲在用戶所做的每個帖子中。在這種情況下,如果用戶更改其名稱,則需要在第二個集合的主用戶記錄頂部更新該用戶的所有帖子。請注意,一旦你完全使用MongoDB風格,數據複製通常是一個必要的惡魔。

......並且在潛在的設置方面還有其他各種各樣的灰色陰影。沒有正確的或非常錯誤的。只是更適合你的情況更糟。 ;)就像我最初寫的那樣,它是諸如寫性能,讀性能,對數據進行分析的緩和/痛苦之間的折衷,我將使用術語使用或數據訪問模式進行總結......

0

MongoDB的方式是將帖子嵌入到USERS集合中。

如果您想以關係方式進行操作,您可以在POSTS集合中放置一個OBJECTID鍵,並在USERS集合中的ARRAY鍵內引用該OBJECTID。

但是,我會提醒你,如果你預見在你的數據集中使用大量的關係操作,MongoDB可能不是你想要的方法。我會建議Postgresql。