Въпреки че не би било невъзможно, MongoDB не би била подходяща за този сценарий.
Причината е, че MongoDB не прави JOINs. Когато имате нужда от заявка, която обхваща множество документи, имате нужда от отделна заявка за всеки документ.
Във вашия пример всеки user
документ ще има масив с _id
на техни приятели. За да намерите „всички приятели на приятелите на Потребител A, които също са приятели на Потребител B“, би означавало, че ще:
- намерете userA и вземете неговия масив от приятели
- намерете всички потребители в този масив и вземете техните масиви за приятели
- намерете всички потребители в тези масиви, които имат UserB в техния масив с приятели
Това са три заявки, които трябва да изпълните. Между всяка от тези заявки, наборът от резултати трябва да бъде изпратен до приложението, приложението трябва да формулира нова заявка и да я изпрати обратно към базата данни. Наборът от резултати, върнат от втората заявка, може да бъде доста голям, което означава, че третата заявка може да отнеме известно време.
tl;dr: Използвайте правилния инструмент за работата. Когато вашите данни са базирани на графики и искате да правите базирани на графики заявки върху тях, използвайте база данни с графики.