Ihre ids
Die Variable wird aus "Strings" und nicht aus ObjectId
konstruiert Werte.
Mongoose "castet" String-Werte für ObjectId
automatisch in ihren korrekten Typ in regulären Abfragen, aber dies geschieht nicht in der Aggregationspipeline, wie in Ausgabe Nr. 1399 beschrieben.
Stattdessen müssen Sie die richtige Umwandlung durchführen, um manuell einzugeben:
ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })
Dann können Sie sie in Ihrer Pipeline-Phase verwenden:
{ "$match": { "_id": { "$in": ids } } }
Der Grund dafür ist, dass Aggregations-Pipelines „normalerweise“ die Dokumentstruktur ändern und Mongoose daher nicht davon ausgeht, dass das „Schema“ auf das Dokument in einer bestimmten Pipeline-Phase zutrifft.
Es ist fraglich, ob die „erste“ Pipeline-Stufe ein $match
ist stage sollte dies tun, da das Dokument tatsächlich nicht verändert wird. Aber im Moment passiert das nicht.
Alle Werte, die möglicherweise "Strings" oder zumindest nicht der richtige BSON-Typ sind, müssen manuell umgewandelt werden, damit sie übereinstimmen.