sql >> Base de Datos >  >> NoSQL >> MongoDB

El $match agregado de Moongoose no coincide con los ID

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.