Можно ли использовать поле из этапа агрегации для фильтрации данных на следующем этапе?
У меня есть этот запрос, где я сопоставляю, а затем выполняю поиск.Я использую mongodb 3.4, поэтому я не могу отфильтровать поиск по условию.То, что я хотел бы сделать, - это выполнить сопоставление или проект с фильтром после поиска, чтобы я мог дополнительно отфильтровать документы из коллекции классов.
В этом сценарии коллекция кулаков имеет идентификатор студента, поэтому поиск $ соответствует идентификатору студента в коллекции классов.Проблема в том, что для одного идентификатора студента может быть несколько классов, и $ lookup возвращает их все.Я хочу использовать данные из матча для дальнейшей фильтрации, чтобы я мог отобрать один класс для каждого учащегося.
collection.aggregate([
{$match: {"field1": "value"}},
{
$lookup: {
from: "classes",
localField: "studentId",
foreignField: "student._id",
as: "classes"
}
},
//filter with a match
{
$match: {
"classes.field1": "$field1value", //$field1value is a field from the first collection
}
}
//or filter with project and condition
{
$project: {
class: {
filter: {
input: "classes",
as: "class",
cond: {$eq: ['$$class.field1', "$classes.field1value"]}
}
}
}
}
])