我有一个产品集合,我想使用search
和title
在author
上实现产品,并以此为依据,对结果进行过滤。因此,由于我的数据集非常大,大约有100万个,因此我为title
和author
创建了一个索引,并且效果很好,因此可以在20毫秒内获取结果。
但是我想使用$lookup
从另一个名为vendor_products
的集合中获取一些其他数据,因为vendor_products
也有大约100万个条目,$lookup
占用了一个很多时间,我的查询最终花费了1000毫秒。
那么有什么方法可以对其进行优化。
PRODUCTS集合(“大约有100万个条目”) 我已经为作者和标题创建了索引
{
'_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'
]
],