Выполнение $ elemMatch только для одного поля эквивалентно использованию find ( link )
Как правило, эффективно ограничивать данные, над которыми будет работать стадия поиска.Поэтому, если я правильно понимаю, вы хотите отфильтровать элементы массива «to_match», а затем выполнить поиск по этому результату.
Вот что я бы предложил: -
aggregate([
{
$project : {
to_match: {
$filter: {
input: "$to_match",
as: "item",
cond: { $eq: [ "$$item", "userId_3" ] }
}
},
data : 1
}
},
{
$match : { "to_match" : {$ne : []}}
},
//// Lookup stage here
])
На основеполе, в котором вы хотите выполнить поиск, вы можете отменить этот результат.