sql >> Database >  >> NoSQL >> MongoDB

Moongoose totale $ match komt niet overeen met id's

Uw ids variabele wordt opgebouwd uit "strings" en niet uit ObjectId waarden.

Mongoose "autocast" tekenreekswaarden voor ObjectId in het juiste type in reguliere zoekopdrachten, maar dit gebeurt niet in de aggregatiepijplijn, zoals beschreven in uitgave #1399.

In plaats daarvan moet je de juiste casting doen om handmatig te typen:

ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })

Dan kunt u ze gebruiken in uw pijplijnfase:

{ "$match": { "_id": { "$in": ids } } }

De reden hiervoor is dat aggregatiepijplijnen "typisch" de documentstructuur veranderen, en daarom veronderstelt mangoest niet dat het "schema" van toepassing is op het document in een bepaalde pijplijnfase.

Het is aannemelijk dat de "eerste" pijplijnfase wanneer het een $match . is stage zou dit moeten doen, aangezien het document inderdaad niet wordt gewijzigd. Maar op dit moment is dit niet hoe het gebeurt.

Alle waarden die mogelijk "strings" zijn of in ieder geval niet het juiste BSON-type, moeten handmatig worden gecast om te matchen.



  1. Gebeurtenis op sleutel verloopt

  2. NestJS:hoe u op sessies gebaseerde gebruikersauthenticatie implementeert

  3. Kan iemand het redis setbit-commando uitleggen?

  4. Hoe Redis Cache implementeren met Django Rest Framework?