这是来自语法数组元素 https://docs.mongodb.com/manual/reference/operator/aggregation/arrayElemAt/
该表达式可以是任何有效的表达式,只要它
解析为一个数组。
这意味着您可以根据需要构造数组元素。就您而言,您只需要名称。所以这应该有效:
[{
$match: {
jobCategoryId: mongoose.Types.ObjectId(jobCategoryId)
}
}, {
$lookup: {
from: 'users',
localField: 'userId',
foreignField: '_id',
as: 'user'
}
}, {
$project: {
_id: 1,
description: 1,
title: 1,
user: {
name: {
$arrayElemAt: ["$user.name", 0]
}
}
}
}]
跟进更新:
有人问如何在之上添加附加属性name
。这是该项目:
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
name: {
$arrayElemAt: ["$user.name", 0]
},
email: {
$arrayElemAt: ["$user.email", 0]
}
}
}
}
第二次跟进正如 Drag0 在评论中所询问的那样:如果上述方法还不够好,因为结果会生成大小为 1 的 user:[] 数组而不是对象 user:{} ,则可以使用以下内容。
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
$let: {
vars: {
firstUser: {
$arrayElemAt: ["$user", 0]
}
},
in: {
name: "$$firstUser.name",
email: "$$firstUser.email"
}
}
}
}
}