Dine ids
variabel vil være konstrueret af "strenge" og ikke ObjectId
værdier.
Mongoose "autocasts" strengværdier for ObjectId
ind i deres korrekte type i almindelige forespørgsler, men dette sker ikke i aggregeringspipelinen, som beskrevet i nummer #1399.
I stedet skal du udføre den korrekte casting for at skrive manuelt:
ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })
Så kan du bruge dem i din pipeline fase:
{ "$match": { "_id": { "$in": ids } } }
Årsagen er, at aggregeringspipelines "typisk" ændrer dokumentstrukturen, og derfor gør mongoose ingen formodning om, at "skemaet" gælder for dokumentet i et givet pipelinestadium.
Det kan diskuteres, at det "første" pipeline-stadium, når det er en $match
fase bør gøre dette, da dokumentet faktisk ikke er ændret. Men lige nu er det ikke sådan det sker.
Alle værdier, der muligvis er "strenge" eller i det mindste ikke den korrekte BSON-type, skal castes manuelt for at matche.