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

MongoDB聚合同时使用$lookup和$group返回空数组如何解决

问题根因

你在$group阶段只输出了_id和names两个字段,原始文档中的id字段没有被保留到聚合的后续阶段,导致$lookup执行时localField: 'id'指向的字段不存在,无法和users集合的id字段匹配,返回的user字段是空数组,后续的$unwind: '$user'会直接过滤掉所有无匹配的文档,最终结果为空。

修复方案

  • 方案1:在$group阶段额外保留id字段,用$first操作符提取同组的id值即可,修改后的$group阶段代码如下:
{$group: {
    _id: '$_id', 
    id: {$first: '$id'}, // 新增这行保留id字段
    names: {$push: {value: '$names.value', changed_at: '$names.changed_at'}}
}}
  • 方案2:如果你分组的_id本身就是和id字段值一致的,也可以直接把$lookup的localField改为_id,不需要修改$group阶段:
{$lookup: {
    from: 'users',
    localField: '_id', // 把原来的id改成_id即可
    foreignField: 'id',
    as: 'user',
}}

补充说明

如果允许保留无匹配用户的文档,可以把$unwind改为带preserveNullAndEmptyArrays参数的写法,避免匹配不到用户时文档被过滤:

{$unwind: {
    path: '$user',
    preserveNullAndEmptyArrays: true
}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:24:03