O Mongoose 4.5 suporta isso
Project.find(query)
.populate({
path: 'pages',
populate: {
path: 'components',
model: 'Component'
}
})
.exec(function(err, docs) {});
E você pode participar de mais de um nível profundo.
Edit 17/03/2021:Esta é a implementação da biblioteca, o que ela faz nos bastidores é fazer outra consulta para buscar coisas para você e depois juntar na memória. Embora este trabalho, mas nós realmente não devemos confiar. Isso fará com que seu design de banco de dados se pareça com tabelas SQL. Esta é uma operação dispendiosa e não escala bem. Por favor, tente projetar seu documento para que ele reduza a junção.