So the situation is, i have a students
and teachers
collection, each student object has a property called fav
which is an array of ObjectId referring to documents in teachers
collection, Now i wanna find out most occurring teacher
among all students fav
property How can i do that?? How can I use mongoose aggregation to work my way around this?? I have tried couple of solutions but doesnt work very been stuck on this for a while now,
If you only want the top N teachers (N << n), one option is to start from the students collection and use $lookup
to bring the teachers:
db.students.aggregate([
{$project: {_id: 0, fav: 1}},
{$unwind: "$fav"},
{$group: {_id: "$fav", count: {$sum: 1}}},
{$sort: {count: -1}},
{$limit: N},
{$lookup: {
from: "teachers",
localField: "_id",
foreignField: "_id",
as: "count"
}},
{$project: {_id: 0, result: {$first: "$count"}}},
{$replaceRoot: {newRoot: "$result"}}
])
See how it works on the playground example - top N
But if you want to find out the count for many teachers, another option is to start from the teachers collection and bring the number of students: playground example - many teachers
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.