MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

mongodb $l'operazione di corrispondenza in $lookup per confrontare objectId non funziona come previsto

Prova questo

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'
                }
            },
        ]);}

Nella tua domanda mancavano due cose

1) Conversione di userid in mongo object id in modo da utilizzare mongoose.Types.ObjectId

2) Non puoi utilizzare il campo di raccolta esterno direttamente nella pipeline interna per questo hai creato una variabile temporanea, quindi abbiamo usato let per dichiarare e per abbinare il campo interno dobbiamo usare $expr