これは、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]
}
}
}
}
2回目のフォローアップ Drag0がコメントで尋ねたように:結果がuser:[]オブジェクトuser:{}の代わりにサイズ1の配列を生成するために上記が十分でない場合は、以下を使用できます。
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
$let: {
vars: {
firstUser: {
$arrayElemAt: ["$user", 0]
}
},
in: {
name: "$$firstUser.name",
email: "$$firstUser.email"
}
}
}
}
}