Я бы посоветовал вам попытаться денормализовать данные, а не идти по пути SQL:
User {
"FirstName" : "Jack",
"LastName" : "Doe",
// ...
// no friend info here
}
Поместить денормализованную информацию в список друзей. Не используйте встроенный массив, потому что вам, вероятно, не нужно извлекать все идентификаторы друзей каждый раз, когда вы выбираете пользователя. Детали структуры данных зависят от отношений, которые вы хотите поддерживать (направленные против ненаправленных и т. Д.), Но это будет выглядеть примерно так:
FriendList {
OwnerUserId : ObjectId("..."),
FriendUserId : ObjectId("..."),
FriendName: "Jack Doe"
// add more denormalized information
}
Теперь, чтобы отобразить список друзей пользователя:
var friends = db.FriendList.find({"OwnerUserId" : currentUserId});
Недостатком является то, что, если подруга меняет свое имя, вам придется обновить все ссылки на это имя. С другой стороны, эта логика тривиальна, и что (как правило, гораздо более распространенный) запрос «извлекать всех друзей» является очень быстрым, простым в написании и простым в обращении.