это кажется огромным количеством взад-вперед по сравнению с тем, что мы могли бы сделать с объединением в реляционной базе данных
Это все очень относительно. Ваше основное предположение о получении "друзей друзей друзей" верно, это несколько прыжков и пара "в памяти" "различает".
Однако, с точки зрения «полной выполненной работы», это не очень отличается от того, что вы бы сделали с SQL. Да, это относительно простой запрос SQL, но сам сервер по-прежнему должен выполнять в основном ту же работу, отдавать или отбирать некоторый сетевой трафик.
Есть ли более эффективный способ сделать это в MongoDB или эта проблема лучше всего подходит для СУБД?
Есть ли лучший способ в MongoDB? Возможно нет. Но «самостоятельное соединение» в SQL не может легко масштабироваться на нескольких серверах. Фактически, попытка сделать это на нескольких серверах в основном превращается в процесс, аналогичный процессу MongoDB.
Технически, эту работу лучше всего выполнять с помощью базы данных графов, которая не является ни MongoDB, ни RDBMS.
Для графических баз данных вы можете взглянуть на Trinity для .NET или NEO4J .