Рассмотрим следующий документ
{
lists: {
list1: [ ObjectId(1), ObjectId(2) ],
list2: [ ObjectId(1), ObjectId(3) ],
list3: [ ObjectId(4), ObjectId(5), ObjectId(1)]
}
}
, в котором содержится массив ссылок на другие коллекции: Products
Мне нужны имена всех этих продуктов, когда я возвращаю ответ API.Поэтому я использовал populate
Something.populate({ path:'lists', select: 'name')
Это работает нормально и заполняет списки массивов названием продуктов.Но в режиме отладки mongoose я вижу, что каждый из этих запросов выполняется отдельно.
Product.find({ _id: { $in:[ 1, 2 ]})
Product.find({ _id: { $in:[ 1, 3 ]})
Product.find({ _id: { $in:[ 4, 5, 1 ]})
В этом списке может быть огромное количество элементов с общими идентификаторами в списках, что означает, что mongoose внутренне запрашивает один и тот же идентификатор несколько раз.
Я также использую cachegoose, но так как это заполненные запросы, значения кэша не влияют на эти запросы.Любое предложение по улучшению этой производительности.