Vos ids
la variable sera construite de "chaînes", et non de ObjectId
valeurs.
Valeurs de chaîne "autocasts" de Mongoose pour ObjectId
dans leur type correct dans les requêtes régulières, mais cela ne se produit pas dans le pipeline d'agrégation, comme décrit dans le problème #1399.
Au lieu de cela, vous devez effectuer le casting correct pour taper manuellement :
ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })
Ensuite, vous pouvez les utiliser dans votre phase de pipeline :
{ "$match": { "_id": { "$in": ids } } }
La raison en est que les pipelines d'agrégation modifient "généralement" la structure du document, et donc mongoose ne présume pas que le "schéma" s'applique au document à une étape donnée du pipeline.
On peut soutenir que la "première" étape du pipeline lorsqu'il s'agit d'un $match
étape devrait le faire, car en effet le document n'est pas altéré. Mais pour le moment, ce n'est pas comme ça que ça se passe.
Toutes les valeurs qui peuvent éventuellement être des "chaînes" ou du moins pas le bon type BSON doivent être transtypées manuellement pour correspondre.