Cela provient de la syntaxe de arrayElemAt
Ce qui signifie que vous pouvez construire vos éléments de tableau comme vous le souhaitez. Dans votre cas, vous ne voulez que le nom. Cela devrait donc fonctionner :
[{
$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]
}
}
}
}]
Suivre la MISE À JOUR :il a été demandé comment ajouter des propriétés supplémentaires au-dessus de name
. Voici le projet :
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
name: {
$arrayElemAt: ["$user.name", 0]
},
email: {
$arrayElemAt: ["$user.email", 0]
}
}
}
}
Deuxième suivi comme Drag0 l'a demandé dans les commentaires :Si ce qui précède n'est pas suffisant car les résultats génèrent un utilisateur :[] tableau de taille 1 au lieu d'un objet utilisateur :{} ce qui suit peut être utilisé.
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
$let: {
vars: {
firstUser: {
$arrayElemAt: ["$user", 0]
}
},
in: {
name: "$$firstUser.name",
email: "$$firstUser.email"
}
}
}
}
}