Я рекомендую вам ограничить количество результатов запроса для уменьшения сетевого спроса. Согласно Docs,
Показатели MongoDB возвращают результаты в виде групп из нескольких документов. Если вы знаете количество желаемых результатов, вы можете уменьшить спрос на сетевые ресурсы, выпустив метод limit().
Это обычно используется в сочетании с операциями сортировки. Для Например, если вам нужно только 50 результатов запроса к пользователям коллекции, вы бы выполнить следующую команду:
db.users.find({$nin : followers_ids}).sort({ timestamp : -1 }).limit(50)
Вы можете использовать курсор, чтобы получить больше документов пользователя по мере необходимости.
Рекомендация реструктурировать Followers схемы
Я рекомендовал бы вам перестроить ваши документы пользователя, если последователи будут расти в большом количестве. В настоящее время схема пользователь может быть такой:
{
_id: ObjectId("123"),
username: "jobs",
email: "[email protected]",
followers: [
ObjectId("12345"),
ObjectId("12375"),
ObjectId("12395"),
]
}
Хорошая вещь о схеме, когда этот пользователь делает что все пользователи, которые необходимо уведомить прямо здесь внутри документа. Недостатком является то, что если вам нужно найти , то каждый пользователь будет следовать за, вам придется запросить всю коллекцию пользователей. Кроме того, ваш пользовательский документ станет больше и более изменчивым по мере роста последователей.
Возможно, вы захотите продолжить нормализацию своих подписчиков. Вы можете сохранить коллекцию, которая соответствует followee последователей с документами, которые выглядят так:
{
_id: ObjectId("123"),//Followee's "_id"
followers: [
ObjectId("12345"),
ObjectId("12375"),
ObjectId("12395"),
]
}
Это будет держать ваши пользовательские документы тонким, но будет принимать дополнительный запрос, чтобы получить последователь. Поскольку массив «последователей» изменяется в размере, вы можете включить стратегию распределения userPowerOf2Sizes для уменьшения фрагментации и перемещения.