Tente isso
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'
}
},
]);}
Na sua consulta, duas coisas estavam faltando
1) Convertendo userid para id de objeto mongo, então usamos
mongoose.Types.ObjectId
2) Você não pode usar o campo de coleção externa diretamente no pipeline interno para isso, você criou uma variável temporária, então usamos
let
para declarar e combinar com o campo interno, precisamos usar $expr