【问题标题】:MongoDB $lookup and $group returns empty ArrayMongoDB $lookup 和 $group 返回空数组
【发布时间】: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 时,它会起作用并给出预期的结果。

我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js database mongodb mongoose


    【解决方案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"}
        }
    }
    

    【讨论】:

    • 这不是错字^^感谢您的帮助!
    猜你喜欢
    • 2018-08-27
    • 2019-04-15
    • 2017-11-01
    • 1970-01-01
    • 2018-07-26
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多