Запрос агрегации MongoDB выполняется медленно - PullRequest
0 голосов
/ 27 августа 2018

Я выполняю следующий запрос агрегации для коллекций с размером:1: all_api с документами 193823652: edge_api с 8250124 документами Запрос:

db.getCollection('edge_api').aggregate([{
    $match: {
      state: {
        $eq: 'rj'
      }
    }
  },
  {
    $lookup: {
      from: "all_api",
      localField: "_id",
      foreignField: "edge_id",
      as: "road_speed"
    }
  },
  {
    $unwind: {
      preserveNullAndEmptyArrays: true,
      path: "$road_speed"
    }
  },
  {
    $project: {
      road_code: "$road_code",
      speed: {
        $switch: {
          branches: [{
              case: {
                $gt: ["road_speed.saving_time", 1535349227]
              },
              then: "$road_speed.spd_cur"
            },
            {
              case: {
                $lte: ["road_speed.saving_time", 1535349227]
              },
              then: "$road_speed.spd_pro"
            }
          ]
        }
      }
    }
  },
  {
    $match: {
      speed: {
        $ne: null
      }
    }
  },
  {
    "$group": {
      "_id": "$_id",
      "road_code": {
        $first: "$road_code"
      },
      "speed": {
        "$avg": "$speed"
      }
    }
  }
], {
  allowDiskUse: true,
  cursor: {
    batchSize: 10000000000
  }
});

Выполнение заняло от 40 до 50 секунд.Что не приемлемо, в случае ответа API.Есть ли что-нибудь, что я могу сделать, чтобы сделать этот запрос производительности бить.Если у кого-то есть какие-либо предложения по этому поводу, пожалуйста, предложите.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...