Это проблема разветвления и разветвления. Я бы посоветовал вам попробовать разойтись:
Храните коллекцию feed
для своих пользователей. Когда пользователь загружает документ, вставьте новый элемент фида в каждую коллекцию элементов своего фида друзей. Коллекция может выглядеть так:
{
"_id": (some id)
"UserId": (id of the user who 'owns', i.e. reads this feed)
"FriendId": (if of the friend who posted the file)
"FriendName": "John Doe" (name of the fried, denormalized)
"Timestamp": ...
}
Использовать составной индекс {UserId, Timestamp}
.
Этот подход требует большой записи: если у Джейн есть сотни друзей, эти сотни вставок займут свое время. С другой стороны, загрузка файла обычно занимает много времени в любом случае, поэтому накладные расходы незначительны, и ваши чтения будут смехотворно простыми.
Конечно, это может быть дополнительно оптимизировано с большим усилием, но оно должно хорошо работать для небольшого трафика.