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.