MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

A operação mongodb $match em $lookup para comparar o objectId não está funcionando conforme o esperado


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