在MongoDB中存储朋友关系?

时间:2011-05-31 04:56:52

标签: mongodb

我想知道使用MongoDB存储好友关系数据的最佳方法是什么?

来自mysql我有一个单独的表,其中有朋友关系有两个外键,每个都指向“友谊”中的朋友,但是MongoDB可能有引用数组甚至是嵌入文档。所以是什么存储这些关系的最佳方式

立即第一反应是我会在每个用户中存储一系列朋友对象ID,然而,这让我很烦恼,因为那样,为了消除“友谊”,我必须删除两个朋友的文件而不是如果我将关系存储在一个单独的集合(一个SQL)中,我可以通过修改一个集合来删除或添加关系。

谢谢!

1 个答案:

答案 0 :(得分:28)

在用户中保留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,但频率会更低。但是你在获取友情列表时会少查询,这会经常使用。