Aqui está um resumo das diferenças:
$lookup - só pode ser usado com
aggregate - só pode ser usado para extrair documentos referenciados de coleções não fragmentadas
- pode extrair documentos referenciados por qualquer campo
- geralmente com melhor desempenho, pois é uma operação do lado do servidor
- requer MongoDB 3.2+
Mangusto
populate() - pode ser usado com
findeaggregate - pode ser usado para extrair documentos referenciados de coleções fragmentadas e não fragmentadas
- só pode extrair documentos referenciados por
_id - nenhum requisito de versão do MongoDB