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 链接多个集合