Prueba esto
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'
}
},
]);}
En su consulta faltan dos cosas
1) Conversión de ID de usuario a ID de objeto Mongo, por lo que usamos mongoose.Types.ObjectId
2) No puede usar el campo de colección externo directamente en la canalización interna para esto, tiene que crear una variable temporal, por lo que usamos let
para declarar y hacer coincidir con el campo interno necesitamos usar $expr