2013-01-18 55 views
0

我們需要爲每個列表顯示雙方Facebook朋友(類似於airbnb所做的)。我們不需要由朋友查詢只顯示每個列表的相互連接。這在關係數據庫中會相對簡單,但我在MongoDB中完成它的最佳方式有點困難。查詢登錄用戶和登錄用戶之間的共同朋友的最佳方式是什麼?我是否應該在查詢清單後單獨使用foreach循環來查詢每個清單,還是有辦法一次查詢清單和共同朋友?如何在MongoDB中爲共同朋友建模

目前的架構,我有是:

Listing: { 
    user_id: object id, 
    ... 
} 

User: { 
     _id: object id, 
     friends: [{facebook_id: string, name: string}] 
     ... 
} 
+0

你有沒有朋友架構或基本上是你的問題?很難判斷您是否正在尋求提高您對整個架構的建議或建議 – Sammaye

+0

我已編輯該問題以添加架構 –

+0

分析實體之間的關係鏈是mongoDB通常不好的用例。這是圖形數據庫的領域。當你的項目還不是很遠,這是它應該解決的首要任務時,你應該考慮切換到一個。 – Philipp

回答

1

據我理解這個問題,在關係世界裏,你將需要一個簡單的內連接,對不對?你做一個用戶的朋友內心加入到另一個用戶,並得到共同的朋友。這可能看起來很簡單,但很容易,但在底層,這是一個代價高昂的操作,它並不比在Mongo中運行自定義Map/Reduce並獲取相同數據更好。 內部操作將是相同的:只需與ID列表相交即可。 因爲我目前對Map/Reduce不太好,所以我不會發表例子。我個人而言,只會將兩個用戶的朋友加載到內存中並在那裏相交。這應該不會太糟糕,然後在RDBMS中進行內部連接。