I have a situation where i need to display combined data from two collections. After displaying that result data i want to apply filter on this result data.
Can anyone suggest way or can show example of this flow? Here is my data with out put
{
"_id" : "a6s54fas46456",
"studentId" : "qYt5yHiZfbGrvXWak",
"name" : "name1"
}
{
"_id" : "asdf46asd4f",
"studentId" : "e2r4nTRiZZRsX6Xgu",
"name" : "name2"
}
{
"_id" : "asdf463443asd4f",
"studentId" : null,
"name" : "name3"
}
{
"_id" : "a6s54fas42346456",
"studentId" : "qYt5yHiZfbGrvXWak",
"name" : "name4"
}
{
"_id" : "asdf46asd6542344f",
"studentId" : null,
"name" : "name3"
}
{
"_id" : "e2r4nTRiZZRsX6Xgu",
"studentName" : "student2"
}
{
"_id" : "qYt5yHiZfbGrvXWak",
"studentName" : "student1"
}
{
UserId: a6s54fas46456
StudentId : "qYt5yHiZfbGrvXWak"
"name" : "name1"
"studentName" : "student1"
}
{
UserId: asdf46asd4f
StudentId : "e2r4nTRiZZRsX6Xgu"
"name" : "name2"
"studentName" : "student1"
}
{
UserId: asdf463443asd4f
StudentId : null
"name" : "name3"
"studentName" : null
}
{
UserId: a6s54fas42346456
StudentId : "qYt5yHiZfbGrvXWak"
"name" : "name4"
"studentName" : "student1"
}
{
UserId: asdf46asd6542344f
StudentId : null
"name" : "name3"
"studentName" : null
}
Thanks
to get data from two collection you should use $lookup and $unwind with preserveNullAndEmptyArrays:true:true
db.users.aggregate([
{$lookup:{from:"students", localField:"studentId", foreignField:"_id", as:"student"}},
{$unwind:{path:"$student",preserveNullAndEmptyArrays:true}},
{$project:{
"UserId":"$_id",
"StudentId" : "$student._id",
"name" : 1,
"studentName" : "$student.studentName"
}
}
])