Повышение скорости поиска $ в большой коллекции данных

#mongodb #mongoose #mongodb-php

#mongodb #mongoose #mongodb-php

Вопрос:

У меня есть коллекция продуктов, которые я хотел бы реализовать, search используя title и author , и на основе этого я хотел бы отфильтровать свои результаты. Итак, поскольку мой набор данных довольно большой, около 1 миллиона, поэтому я создал индекс для title и author , и это отлично работает, результаты извлекаются менее чем за 20 мс.

Но я хочу получить некоторые дополнительные данные, используя $lookup из другой коллекции с именем vendor_products , нет , поскольку vendor_products в ней также около 1 миллиона записей, $lookup это занимает много времени, и мой запрос заканчивается через 1000 мс.

Итак, есть ли какой-либо способ оптимизировать это.

Коллекция ПРОДУКТОВ (‘содержит около миллиона записей’) Я создал индекс для автора и названия

 {
'_id'=>'ObjectId('...')',
'title'=>'Harry Potter',
'author'=>'J.K Rowling',
'vendor_product_id'=>'ObjectId('...')'
'other_data'...
}
  

ПРОДУКТЫ ПОСТАВЩИКА

 {
  '_id'=>'ObjectId('...')',
  'product_id'=>'ObjectId('...')',
  'data'=>['data i need to fetch']
}

[
       '$match'=>['$text'=> ['$search'=> $search_query ] ] 
],
  [
       '$lookup' => [
       'from' => 'vendor_products',
       'localField' => '_id',
       'foreignField' => 'product_id',
       'as' => 'vendor_products'
  ]
],
  

Комментарии:

1. Есть ли у вас индекс в product_id поле?

2. да, я создал его с помощью этой команды db.vendor_products.createIndex({'product_id':1})

3. Теперь запустите запрос и проверьте время ответа

4. спасибо, это займет около 120 мс