Essayez ceci
const { user } = req;
productsModels.aggregate([
{ $sort: { '_id': -1 } },
{ $limit: 10 },
{
$lookup: {
from: 'likes',
let: {productId:"$_id"},
pipeline: [
{
$match: {
$expr:{$eq:['$_id', '$$productId']}},
'userId': mongoose.Type.Object(user.id)
}
}
],
as: 'liked'
}
},
]);}
Dans votre requête, deux choses manquaient
1) Conversion de l'ID utilisateur en ID d'objet mongo, nous avons donc utilisé mongoose.Types.ObjectId
2) Vous ne pouvez pas utiliser le champ de collection externe directement dans le pipeline interne pour cela, vous avez créé une variable temporaire, nous avons donc utilisé let
pour déclarer et faire correspondre avec le champ interne, nous devons utiliser $expr