You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB使用$lookup关联集合返回空值,如何计算车队平均速度?

问题原因
  • 核心错误是聚合代码中所有引号使用了中文全角引号(‘、“),MongoDB语法仅支持英文半角单/双引号,全角引号会被判定为非法标识符,导致$lookup的关联规则无法生效,最终关联结果返回空数组。
  • MongoDB集合名大小写敏感,若实际集合名的大小写和$lookup中from字段填写的集合名不完全一致,也会导致关联返回空。
  • 你当前的代码仅完成了两集合关联,若要实现计算两支车队平均速度的最终需求,还需要补充展开关联结果、分组聚合的逻辑。
解决方案

1. 修复基础关联查询

将所有引号替换为英文半角引号,即可正常得到关联结果:

db.getCollection('Racers').aggregate([
    {
        $lookup: {
            from: "Races",
            localField: "last_name",
            foreignField: "last_name",
            as: "Time"
        }
    }
])

2. 完整实现车队平均速度统计

以下是完整聚合逻辑,默认先统计车队平均比赛耗时,若需计算平均速度,可按注释说明替换公式即可:

db.getCollection('Racers').aggregate([
    // 关联Races集合匹配对应选手的比赛数据
    {
        $lookup: {
            from: "Races",
            localField: "last_name",
            foreignField: "last_name",
            as: "raceInfo"
        }
    },
    // 展开关联得到的数组,方便后续聚合计算
    { $unwind: "$raceInfo" },
    // 按车队名称分组,统计平均数据
    {
        $group: {
            _id: "$Team.Name",
            // 统计车队平均比赛耗时
            avgOsakaTime: { $avg: "$raceInfo.Osaka_Time" },
            // 若要计算平均速度,假设赛道固定长度为S,取消注释下方代码并替换S为实际长度即可
            // avgSpeed: { $avg: { $divide: [S, "$raceInfo.Osaka_Time"] } },
            // 可选:统计车队参赛人数
            racerCount: { $sum: 1 }
        }
    }
])

执行后返回示例结果:

[
  { "_id" : "Gowl", "avgOsakaTime" : 352.5, "racerCount" : 2 },
  { "_id" : "Lion", "avgOsakaTime" : 353.5, "racerCount" : 2 }
]

内容的提问来源于stack exchange,提问作者NGT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:06