Selvom det ikke ville være umuligt, ville MongoDB ikke passe godt til dette scenarie.
Årsagen er, at MongoDB ikke laver JOINs. Når du har brug for en forespørgsel, der spænder over flere dokumenter, har du brug for en separat forespørgsel for hvert dokument.
I dit eksempel er hver user
dokument ville have et array med _id
deres venner. At finde "alle venner af brugerens venner, som også er venner af brugeren" ville betyde, at du ville:
- find brugerA og få hans venner-array
- find alle brugere i det array og få deres venne-arrays
- find alle brugere i disse arrays, som har UserB i deres friends-array
Det er tre forespørgsler, du skal udføre. Mellem hver af disse forespørgsler skal resultatsættet sendes til applikationen, applikationen skal formulere en ny forespørgsel og sende den tilbage til databasen. Resultatsættet, der returneres fra den 2. forespørgsel, kan være ret stort, hvilket betyder, at den tredje forespørgsel kan tage et stykke tid.
tl;dr: Brug det rigtige værktøj til opgaven. Når dine data er grafbaserede, og du vil lave grafbaserede forespørgsler på dem, skal du bruge en grafdatabase.