Vaše ids proměnná bude vytvořena z "řetězců" a nikoli z ObjectId hodnoty.
Mongoose "autocasts" řetězcové hodnoty pro ObjectId na jejich správný typ v běžných dotazech, ale to se nestane v agregačním kanálu, jak je popsáno v čísle #1399.
Místo toho musíte provést správné přetypování, abyste mohli ručně zadat:
ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })
Pak je můžete použít ve fázi procesu:
{ "$match": { "_id": { "$in": ids } } }
Důvodem je to, že agregační kanály „obvykle“ mění strukturu dokumentu, a proto mongoose nepředpokládá, že se „schéma“ vztahuje na dokument v jakékoli fázi procesu.
Je diskutabilní, že „první“ fáze potrubí, když se jedná o $match etapa by to měla udělat, protože dokument se ve skutečnosti nemění. Ale právě teď se to takhle nestává.
Všechny hodnoty, které mohou být "řetězce" nebo alespoň nemají správný typ BSON, je třeba ručně přetypovat, aby se shodovaly.