我正在对集合的大小执行以下聚合查询:
1:具有19382365文档的all_api
2:具有8250124文档的edge_api
查询:
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响应,则不可接受。
有什么我可以做的,以使此查询性能受到打击。
如果有人对此有任何建议,请提出建议。
谢谢。