Bien que cela ne soit pas impossible, MongoDB ne conviendrait pas à ce scénario.
La raison en est que MongoDB ne fait pas de JOIN. Lorsque vous avez besoin d'une requête qui s'étend sur plusieurs documents, vous avez besoin d'une requête distincte pour chaque document.
Dans votre exemple, chaque user
document aurait un tableau avec le _id
's de leurs amis. Pour trouver « tous les amis des amis de l'Utilisateur A qui sont également amis de l'Utilisateur B », cela signifie que vous devez :
- trouver l'utilisateurA et obtenir son tableau d'amis
- trouver tous les utilisateurs de ce tableau et obtenir leurs tableaux d'amis
- trouver tous les utilisateurs de ces tableaux qui ont UserB dans leur tableau d'amis
Ce sont trois requêtes que vous devez effectuer. Entre chacune de ces requêtes, le jeu de résultats doit être envoyé à l'application, l'application doit formuler une nouvelle requête et la renvoyer à la base de données. Le jeu de résultats renvoyé par la 2e requête peut être assez volumineux, ce qui signifie que la 3e requête peut prendre un certain temps.
tl;dr : Utilisez le bon outil pour le travail. Lorsque vos données sont basées sur des graphiques et que vous souhaitez y effectuer des requêtes basées sur des graphiques, utilisez une base de données de graphiques.