0

我正在使用 node-js 和 mongoDB ,所有查询都正常并且工作正常,但在某些时候我使用的查询使用了 4 个查找,还根据这些查找应用了匹配,并在同一个查询中应用了分页+排序。但是我面临的主要问题是查询需要大约 10-20 秒才能从数据库中获取数据,这确实是一个太长的时间段。

这是相同的代码片段

var products = await db.collection('catalog_products')
    .aggregate([
    { $match: { categories: cat_id.toString(), status:1, verification_status:1}},
    { $lookup: { from: 'catalog_product_meta', localField: '_id', foreignField: 'product_id', as: 'meta' } }, { $unwind:"$meta" },
    { $lookup: { from: 'catalog_product_attributes', localField: '_id', foreignField: 'product_id', as: 'attributes' } }, { $unwind:"$attributes" },
    {$match :  {$and : [ { $or : [ { "attributes.attribute_value" : ObjectId("60f5626681cc91c83a34f6c8") }, { "attributes.attribute_value" : ObjectId("617285baaad0c6b9d269a6c5") } ] }, { $or : [ { "attributes.attribute_value" : ObjectId("61600701dc103aaf206165c3") } ] } ]}},
    { $lookup: { from: 'catalog_product_prices', localField: '_id', foreignField: 'product_id', as: 'prices' } }, { $unwind:"$prices" },
    { $match : {$and:{ 'prices.regular_price': { '$gte': 3109, '$lte': 15406 } }}},
    { $sort: sort},
    { $project: {
        "_id"               : 1,
        "name"              : "$meta.name",
        "url_key"           : 1,
        "regular_price"     : "$prices.regular_price",
        "sale_price"        : "$prices.sale_price",
    } },
    ],{ "allowDiskUse" : true }).skip(36).limit(36).toArray();
4

0 回答 0