may I add to Joe’s answer one word of warning?
$lookup is NOT meant as replacement for a join. Very often I see folks modeling their data with a tabular (aka relational) mindset. This will not be fun in the end and you will not take advantage of the pros of the flexible datamodel MongoDB provides.
So whenever you think that you want to use $lookup - check your datamodel, check if embedding will help to avoid $lookup. Often this comes with a the notion of denormalized data and data duplication. This is not bad, you gain simplicity, and read speed - you pay with some more updates. It will be always a trade of and you will need to think a lot more than in SQL about your data moldel.
$lookup can make sense e.g. when your model works best in case need to you use references.