Tus ids
la variable se construirá a partir de "cadenas", y no ObjectId
valores.
Mongoose "autotransmite" valores de cadena para ObjectId
en su tipo correcto en consultas regulares, pero esto no sucede en la canalización de agregación, como se describe en el problema n.º 1399.
En su lugar, debe realizar la conversión correcta para escribir manualmente:
ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })
Luego puede usarlos en su etapa de canalización:
{ "$match": { "_id": { "$in": ids } } }
El motivo es que las canalizaciones de agregación "normalmente" alteran la estructura del documento y, por lo tanto, mongoose no presupone que el "esquema" se aplica al documento en cualquier etapa de canalización determinada.
Es discutible que la "primera" etapa de canalización cuando es una $match
etapa debe hacer esto, ya que de hecho el documento no se altera. Pero en este momento no es así como sucede.
Cualquier valor que posiblemente sea "cadena" o al menos no del tipo BSON correcto debe convertirse manualmente para que coincida.