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
find
eaggregate
- 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