Хранение отношений друга в MongoDB?
Мне было интересно, какой лучший способ хранения данных отношений друзей с помощью MongoDB?
Из mysql у меня была отдельная таблица с дружескими отношениями с двумя внешними ключами, каждая из которых указывала на друга в "дружбе", однако MongoDB мог иметь массивы ссылок или даже встроенных документов. лучший способ сохранить эти отношения
Немедленная первая реакция заключалась в том, что я бы сохранил массив идентификаторов объектов-пользователей у каждого пользователя, однако это меня беспокоит, потому что тогда, чтобы удалить "дружбу", мне пришлось бы делать удаления в обоих документах друзей, тогда как если я сохранил отношения в отдельной коллекции (a la SQL), я мог бы удалить или добавить отношения, просто изменив одну коллекцию.
Спасибо!
Ответы
Ответ 1
Сохранение списка 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
из списка друзей обоих пользователей, но частота этого будет намного меньше. Но вы запрашиваете меньше в получении списка друзей, который будет использоваться часто.