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.