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

MongoDB聚合查询按用户获取专属关联数据问题咨询

MongoDB聚合查询调整方案

现有语句核心问题

  • 关联集合配置错误:你需要关联的是Report报告表,现有语句错误关联了orders集合
  • 关联逻辑缺失:$lookup的let参数错误定义为固定字符串'id',没有获取当前用户的_id,且子查询中没有匹配报告表uid与用户ID的关联条件,导致返回全量关联数据
  • 字段映射错误:用户表姓名字段为displayName,现有$project中配置的name字段不存在,会返回空值
  • 日期参数非法:2021年11月没有31日,ISODate("2021-11-31")会触发日期格式报错

调整后完整查询语句

db.getCollection('users').aggregate([
    { 
        "$match": { brand: "Jollibee" } 
    },
    {
        $lookup: {
            from: "Report", // 若实际报告表集合名为全小写可改为report
            let: { userId: "$_id" },
            pipeline: [
                {
                    $match: {
                        $expr: { $eq: ["$uid", "$$userId"] },
                        date: { $gte: ISODate("2020-11-01"), $lt: ISODate("2021-12-01") }
                    }
                }
            ],
            as: "reports",
        }
    },
    {
        $project: {
            "_id": 1,
            "displayName": 1,
            "reports": 1
        }
    }
])

关键调整说明

  1. 关联变量定义改为{ userId: "$_id" },读取当前遍历用户的ID作为关联匹配变量
  2. 子查询增加$expr匹配条件,仅筛选报告表uid字段等于当前用户ID的数据,实现每个用户仅拉取自身关联数据
  3. 修正日期范围为$lt: ISODate("2021-12-01"),避免非法日期报错
  4. 修正$project字段为用户表实际存在的displayName,保证返回值正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:36:07