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

mongodb $match operation i $lookup for at sammenligne objectId fungerer ikke som forventet

Prøv dette

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

I din forespørgsel mangler to ting

1) Konvertering af bruger-id til mongo objekt-id, så vi brugte mongoose.Types.ObjectId

2) Du kan ikke bruge ydre opsamlingsfelt direkte i indre pipeline for dette har du oprettet temp variabel, så vi brugte let for at deklarere og matche med internt felt skal vi bruge $expr




  1. Tæl hændelser, og indsæt streng literal under aggregering

  2. MongoDB:Skal du forhåndstildele et dokument, hvis du bruger $addToSet eller $push?

  3. Hvordan udfylder man dybt indlejrede id'er efter samlet opslag i mongodb?

  4. Indsæt eller opdater mange dokumenter i MongoDB