Även om det inte skulle vara omöjligt, skulle MongoDB inte passa bra för detta scenario.
Anledningen är att MongoDB inte gör JOINs. När du behöver en fråga som sträcker sig över flera dokument behöver du en separat fråga för varje dokument.
I ditt exempel, varje user
dokument skulle ha en array med _id
deras vänner. Att hitta "alla vänner till vänner till UserA som också är vänner till UserB" skulle innebära att du skulle:
- hitta användareA och skaffa hans kompisarray
- hitta alla användare i den arrayen och få deras vän-arrayer
- hitta alla användare i dessa arrayer som har UserB i deras friends-array
Det här är tre frågor du måste utföra. Mellan var och en av dessa frågor måste resultatuppsättningen skickas till applikationen, applikationen måste formulera en ny fråga och skicka tillbaka den till databasen. Resultatuppsättningen som returneras från den andra frågan kan vara ganska stor, vilket innebär att den tredje frågan kan ta ett tag.
tl;dr: Använd rätt verktyg för jobbet. När din data är grafbaserad och du vill göra grafbaserade frågor på den, använd en grafdatabas.