2011-05-31 292 views
18

我想知道使用MongoDB存儲朋友關係數據的最佳方式是什麼?在MongoDB中存儲好友關係?

來自mysql我有一個單獨的表與朋友關係,有兩個外鍵,每個指向一個朋友在「友誼」,但是,與MongoDB它可能有引用數組甚至嵌入文件..什麼最好的方式來存儲這些關係

立即的第一反應是,我會在每個用戶存儲一個朋友對象id的數組,但是,這麻煩了我,因爲然後,爲了消除「友誼」,我會對兩個朋友的文檔都進行刪除,而如果我將關係存儲在單獨的集合(一種SQL語句)中,我可以通過修改一個集合來刪除或添加關係。

謝謝!

+0

你所描述的更適合於傳統的RDBMS,而不是模式更少的產品。如果你使用了RDBMS,會容易得多。你選擇mongo的任何特殊原因? – JohnP 2011-05-31 04:58:35

+0

嗨,約翰,對於朋友,我絕對同意。我選擇了Mongo是因爲我要存儲的非結構化數據與朋友相關。特別是像標籤和在一個字段中嵌入數組/引用的功能對於存儲註釋等東西來說也非常酷。 – 2011-05-31 05:29:34

+0

我知道你可能在MongoDB上設置了自己的心(我自己喜歡它),但是你可能想要這是一個圖形數據庫。 – EhevuTov 2012-02-09 08:44:18

回答

26

在用戶中保存friend_ids的列表,這是我會推薦的。一些原因,

1.你查詢一個用戶,你有所有朋友預先可用的列表。

2.通過查看相應的ID應該出現在用戶的朋友列表中,也可以處理請求(待定,接受)。所以,我可以通過查詢

my_id, my_friend_ids = user._id, user.friend_ids 
my_friends = db.users.find({'_id':{'$in': my_friend_ids}, 'friend_ids': my_id}) 

是,同時消除了友誼得到的實際,並接受好友列表,你必須從$pull兩個用戶的好友列表,但這個頻率會少得多。但是你在獲取朋友列表時會少一些查詢,這會頻繁使用。

+0

聽起來很不錯,我現在就用這個​​..這很有道理。謝謝! – 2011-05-31 05:31:54

+0

優秀的答案,...「但頻率會少得多」... 嗯,解釋..謝謝! – dsignr 2012-02-08 20:19:18

+0

@simplyharsh哪一個你建議embedmany或參考很多? – 2015-04-29 19:24:04