MongoDB $lookup 和 $group 返回空数组

Posted

技术标签:

【中文标题】MongoDB $lookup 和 $group 返回空数组【英文标题】:MongoDB $lookup and $group returns empty Array 【发布时间】:2021-11-16 01:59:00 【问题描述】:

我正在尝试使用以下聚合:

[
    $unwind: '$names',
    $sort: 'names.changed_at': -1,
    $group: _id: '$_id', names: $push: value: '$names.value', changed_at: '$names.changed_at',
    $limit: 3,
    
        $lookup: 
            from: 'users',
            localField: 'id',
            foreignField: 'id',
            as: 'user',
        ,
    ,
    $unwind: '$user',
    
        $project: 
            _id: 0,
            old_name: $first: '$names',
            user: avatar_url: 1, current_tag: 1,
        ,
    
]

使用 $lookup 和 $group 它返回 []。 当我删除 $lookup 或 $group 时,它会起作用并给出预期的结果。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您正在尝试将id 字段用于$lookup,但在此$group 阶段之后:

 $group:  _id: '$_id', names:  $push:  value: '$names.value', changed_at: '$names.changed_at'    ,

文档结构为:


  _id: ObjectId,
  names:  value: string, changed_at: Date []

如您所见,没有id 字段。

如果这是一个拼写错误,只需将 id 更改为 _id。如果这不是错字,那么您需要在$group 阶段“保存”id 字段,如下所示:


    $group: 
        _id: '$_id',
        names: $push: value: '$names.value', changed_at: '$names.changed_at',
        id: $first: "$id"
    

【讨论】:

这不是错字^^感谢您的帮助!

以上是关于MongoDB $lookup 和 $group 返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 聚合 $lookup 不适用于 $group

使用 $unwind、$lookup 和 $group 的复杂聚合中的 mongodb 正确列表顺序

Mongoose.aggregate(pipeline) 使用 $unwind、$lookup、$group 链接多个集合

$group 和 $lookup 没有提供正确的数据

MongoDB 聚合 - $lookup 性能

MongoDB 单个 $lookup / 聚合查询以列出用户和用户分配为成员的团队