#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 мс