是否可以使用聚合阶段的字段在以后的阶段过滤数据?
我有这个查询,我先进行匹配,然后进行查找。我正在使用mongodb 3.4,因此无法使用条件过滤查找。我想做的是在查找后执行匹配项或带有过滤器的项目,以便我可以进一步从class集合中过滤文档。
在这种情况下,第一个集合具有一个学生ID,因此$ lookup在classes集合中与该学生ID匹配。问题在于,单个studentID可以有多个班级,而$ 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"]}
}
}
}
}
])
答案 0 :(得分:0)
使用pipeline
查找。以下查询将起作用:
collection.aggregate([
{ $match: { "field1": "value" } },
{ $lookup: {
from: "classes",
let: [studentId: "$studentId", field1value: "$field1value"],
pipeline: [{ $match: {
$expr: {
$and: [
{ $eq: ["$_id", "$$studentId"] },
{ $eq: ["$field1", "$$field1value"] },
]
},
} }],
as: "classes",
} }
]);
我希望这会有所帮助。