steps.step wird in diesem Fall zu einem Array von Strings ausgewertet ["s1", "s2"] . Das normale $lookup unterstützt einen solchen Vergleich und macht $in hinter den Kulissen.
In Ihrem zweiten Beispiel verwenden Sie $expr Sie müssen also die Ausdruckssprache verwenden, daher müssen Sie $in Betreiber:
$expr: { $in: ['$_id', '$$stepId'] }