Prowadzenie listy friend_ids
w użytkowniku, to polecam. Kilka powodów,
1. Wysyłasz zapytanie do użytkownika i masz z góry dostępną listę wszystkich znajomych.
2. Żądania (oczekujące, zaakceptowane) można również obsłużyć, sprawdzając, czy odpowiednie identyfikatory powinny znajdować się na obu listach znajomych użytkownika. Mogę więc uzyskać listę rzeczywistych i zaakceptowanych znajomych, wysyłając zapytanie
my_id, my_friend_ids = user._id, user.friend_ids
my_friends = db.users.find({'_id':{'$in': my_friend_ids}, 'friend_ids': my_id})
Tak, usuwając przyjaźń, musisz $pull
z listy znajomych obu użytkowników, ale częstotliwość tego byłaby znacznie mniejsza. Ale mniej zapytasz, aby uzyskać listę znajomych, która byłaby często używana.