Подтвердить что ты не робот

Хранение отношений друга в MongoDB?

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

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

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

Спасибо!

4b9b3361

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