Mongo Aggregation
Instead of SQL, use the pipeline to create complex queries. MongoDB compass has a great editor for this that creates the structure and shows you the results at each step.
$lookup - basically like an SQL join that takes all the matches from the foreign table and puts it in an array named as
$unwind - takes an array path and makes a seperate entry for each array element with its parent {x: 1, y: [1,2]} => {x: 1, y: 1}, {x: 1, y: 2}
$replaceRoot - allows you to create a new doc and clean up grabbing fields from nested and such
$group - basically a group by
$sum - put sum: 1 to just do a count
$push - to create array of each value
Example
[{
$lookup: {
from: 'companies',
localField: 'user.company_id',
foreignField: '_id',
as: 'company'
}
}, {
$unwind: {
path: "$company",
preserveNullAndEmptyArrays: false
}
}, {
$replaceRoot: {
newRoot: {
user: "$user.name",
email: "$user.email",
user_pic: "$user.pic",
url: "$video.s3_url",
folder_id: "$_id",
date_created: "$date_created",
company_name: "$company.name",
company_logo: "$company.logo_url"
}
}
}, {
$group: {
_id: "$email",
count: {
$sum: 1
},
videos: {
$push: {
date_created: "$date_created",
url: "$url",
folder_id: "$folder_id"
}
}
}
}]
Last updated