У меня есть коллекция продуктов, в которой я хотел бы реализовать search
, используя title
и author
, и на основании этого я хотел бы отфильтровать свои результаты. Так как мой набор данных довольно большой, около 1 млн., Поэтому я создал индекс для title
и author
, и он отлично работает, результаты выбираются менее 20 мс.
Но я хочу получить некоторые дополнительные данные, используя $lookup
из другой коллекции под названием vendor_products
, нет, поскольку vendor_products
также содержит около 1 миллиона записей, $lookup
занимает много времени, и мой запрос заканчивается ups, принимающих 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'
]
],