Hãy thử điều này
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'
}
},
]);}
Trong truy vấn của bạn, thiếu hai thứ
1) Chuyển đổi userid thành id đối tượng mongo, vì vậy chúng tôi đã sử dụng mongoose.Types.ObjectId
2) Bạn không thể sử dụng trường bộ sưu tập bên ngoài trực tiếp trong đường dẫn bên trong vì điều này bạn đã tạo biến tạm thời nên chúng tôi đã sử dụng let
để khai báo và để khớp với trường nội bộ, chúng ta cần sử dụng $expr