To klasyczny problem obserwujących i nie ma na to jednej odpowiedzi. Sprawdź ten link:
mongo db projektowanie obserwowania i kanałów, gdzie powinienem osadzić?
Właściwie ta sytuacja bardzo dobrze nadaje się do schematu relacyjnego, jeśli MongoDB i serwer SQL byłyby jedynymi opcjami, jakie miałeś. Ale jest to szczególny rodzaj problemu relacyjnego, w którym masz związek dwukierunkowy. Być może lepiej sobie z tym poradzi grafowa baza danych:
http://forum.kohanaframework.org/discussion/10130/followers-and-following-database-design-like-twitter/p1
Chodzi o to, że możesz zachować obserwujących lub obserwujących w dokumencie użytkownika, ale nie jedno i drugie, aby uniknąć problemów z podwójnym usuwaniem. Więc jeśli musisz trzymać się MongoDB, jednym wyjściem może być... (zakładając, że ludzie nie śledzą/nie śledzą nikogo tego często),
Trzymaj tylko obserwujących w dokumencie, ponieważ kiedy przeglądam mój profil, byłbym zainteresowany osobami, które obserwuję.. (to jest powód, dla którego je obserwowałem, prawda?)..A następnie wykonaj zapytanie takie jak:db.Users.find({ user_id : { $in : followees })
To powie, kto wszyscy mnie śledzą (powiedzmy, że mój identyfikator to 'user_id').
Kolejnym powodem, dla którego nie sugeruję odwrotnej sytuacji, jest to, że... można śledzić maksymalnie 30-40 osób, więc dokument użytkownika przechowujący 30-40 obserwujących powinien być w porządku w porównaniu z dokumentem użytkownika przechowującym tysiące obserwujących! Dzięki podejściu „obserwator w dokumencie” otrzymujesz mniej więcej równe dokumenty użytkownika w całym tekście. W zależności od ilości wprowadzonych danych obserwujących (jeśli są, oprócz follower_id), możesz chcesz uważać na limit rozmiaru dokumentu.