MongoDB使用$lookup关联集合无响应,查询结果不符合预期如何解决?
问题诊断
你的查询存在两处核心逻辑错误,是导致全表扫描、无响应的直接原因:
- 字段匹配错误:
$group阶段仅输出_id(存储分组用的doctor_id)和totalSum两个字段,后续$lookup中填写的localField: 'id'是不存在的字段,匹配逻辑完全失效,触发doctors集合全表扫描 - 投影字段错误:
$project阶段引用的$doctor_id同样是不存在的字段,最终输出无法拿到正确的医生ID
优化后的查询语句
db.getCollection("reports").aggregate([ { $group: { _id: "$doctor_id", totalSum: { $sum: 1 } }}, { $lookup: { from: 'doctors', localField: '_id', foreignField: 'doctor_id', as: 'doctor_info' } }, // 可选:过滤没有匹配到医生信息的脏数据 { $match: { doctor_info: { $ne: [] } } }, { $unwind: "$doctor_info" }, { $project: { _id: 0, doctor_id: "$_id", totalSum: "$totalSum", name: "$doctor_info.name" } } ])
额外性能优化操作
执行以下命令给doctors集合的关联字段加唯一索引,可进一步把关联查询耗时压缩到毫秒级:
db.doctors.createIndex({ doctor_id: 1 }, { unique: true })
修正逻辑并加索引后,只会匹配分组得到的5000个doctor_id,不会扫描doctors全表,完全符合你的输出要求。
内容的提问来源于stack exchange,提问作者Sanchit Srivastava
相关产品推荐
相关产品推荐

