Prova questo
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'
}
},
]);}
Nella tua domanda mancavano due cose
1) Conversione di userid in mongo object id in modo da utilizzare mongoose.Types.ObjectId
2) Non puoi utilizzare il campo di raccolta esterno direttamente nella pipeline interna per questo hai creato una variabile temporanea, quindi abbiamo usato let
per dichiarare e per abbinare il campo interno dobbiamo usare $expr