I'm writing a function which will join two collections and two filters for each.
public class Teacher
{
public string Id{ get; set; }
public string Name{ get; set; }
public string TeacherFilter{ get; set; }
...
}
public class Student
{
public string Id{ get; set; }
public string Name{ get; set; }
public string StudentFilter{ get; set; }
public string TeacherId{ get; set; }
...
}
public class TeacherStudents
{
public string Id{ get; set; } -- from teacher
public string Name{ get; set; } -- from teacher
public IEnumerable<Student> Students{get;set;}
}
public class TeacherStudents
{
public string Id{ get; set; } -- from teacher
public string Name{ get; set; } -- from teacher
public IEnumerable<Student> Student{get;set;}
}
public class TeacherStudent
{
public string Id{ get; set; } -- from teacher
public string Name{ get; set; } -- from teacher
...
public Student Student{get;set;}
}
Get(string TeacherFilter,string StudentFilter).
Here is how i implement it
var query = teacherCollection.Aggregate().Match(x => x.TeacherFilter== TeacherFilter); //filter teach
var query1 = query
.Lookup<Teacher, Student, TeacherStudent>(studentCollection, t => t.Id, s => s.TeacherId, l => l.Student)
.Unwind(x => x.Student, new AggregateUnwindOptions<TeacherStudent>())
.Match(x => x.StudentFilter== StudentFilter) //filter student
For the teacher collection, useless data has been filter out before lookup which will reduce the data size when doing the lookup(join). But for the student collection, the match stage is appended after the lookup. so does all the data from student will join with teacher behind the scenes? is it possible to filter out some student data before the lookup?