sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb $matcha operation i $lookup för att jämföra objectId fungerar inte som förväntat

Prova detta

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 fråga saknas två saker

1) Konvertera användar-id till mongo objekt-id så vi använde mongoose.Types.ObjectId

2) Du kan inte använda yttre samlingsfält direkt i den inre pipeline för detta, du har skapat temp variabel så vi använde let för att deklarera och matcha med internt fält måste vi använda $expr




  1. MongoDB $runda

  2. Installera MongoDB på CentOS 8

  3. Mongodb (kod=avslutad, status=14) misslyckades men inga tydliga fel

  4. Mongo DB - export i JSON utökat läge