sql >> Database >  >> NoSQL >> MongoDB

mongodb $match-bewerking in $lookup om te vergelijken objectId werkt niet zoals verwacht

Probeer dit

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

In uw vraag ontbraken twee dingen

1) Gebruiker-ID converteren naar mongo-object-ID, dus we gebruikten mongoose.Types.ObjectId

2) Je kunt het buitenste verzamelveld niet rechtstreeks in de binnenste pijplijn gebruiken, hiervoor heb je een tijdelijke variabele gemaakt, dus we gebruikten let om te declareren en te matchen met het interne veld moeten we $expr . gebruiken




  1. Hoe de _id van een MongoDB-document bijwerken?

  2. Hoe MongoDB-veldnaam op willekeurige diepte te vinden

  3. Is het veilig om het journaalbestand van mongodb te verwijderen?

  4. MongoDb streamt ingevoegde gegevens in realtime (of bijna realtime)