Хранить дружеские отношения в MongoDB? - PullRequest
19 голосов
/ 31 мая 2011

Мне было интересно, как лучше всего хранить данные отношений друзей с помощью MongoDB?

Исходя из mysql, у меня была отдельная таблица отношений друзей, в которой было два внешних ключа, каждый из которых указывал на друга в "дружба », однако, с MongoDB возможно иметь массивы ссылок или даже встроенные документы ... так что лучший способ сохранить эти отношения

Первой немедленной реакцией было сохранение массива идентификаторов объектов друзей вкаждый пользователь, однако, это беспокоит меня, потому что тогда, чтобы удалить «дружбу», я должен был бы сделать удаления в документах обоих друзей, тогда как, если бы я сохранил отношения в отдельной коллекции (как SQL), я мог бы удалить или добавитьотношения, просто изменив одну коллекцию.

Спасибо!

1 Ответ

28 голосов
/ 31 мая 2011

Ведение списка friend_ids для пользователя - это то, что я рекомендую. Несколько причин,

1.Вы запрашиваете пользователя, и у вас есть список всех друзей, доступных заранее.

2. Запросы (ожидающие, принятые) также можно обрабатывать, видя, что соответствующие идентификаторы должны присутствовать в списке друзей пользователя. Таким образом, я могу получить список настоящих и принятых друзей, запросив

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 из списка друзей обоих пользователей, но частота будет намного меньше. Но вы меньше запрашиваете список друзей, который будет часто использоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...