これを試してください
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'
}
},
]);}
クエリで欠落している2つのこと
1)ユーザーIDをmongoオブジェクトIDに変換するため、mongoose.Types.ObjectId
を使用しました
2)一時変数を作成しているため、内部パイプラインで外部コレクションフィールドを直接使用することはできないため、let
を使用しました 宣言して内部フィールドと照合するには、$expr
を使用する必要があります