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