Olá Luiz, tudo bem?
O exemplo da aula foi para mostrar que temos a opção de associar dados entre duas coleções distintas para trazer o resultado unificado na busca. O MongoDB, assim como outros bancos NoSQL, nos dá a opção de já cadastrar objetos completos em um dos seus campos, ao invés de apenas armazenar a referência (id). Esse é um grande diferencial desse tipo de banco e a maioria dos dados é de fato armazenado nesse formato.
Ou seja, ao invés de termos uma coleção separada de autores, poderíamos inclui-los dentro de livros e ter dados diferenciados para cada um deles, como por exemplo um autor com apenas o nome, outro com nome e nacionalidade, e assim por diante.
Para modificar o exemplo do projeto e conseguir cadastrar das duas formas (por String e pelo ObjectId), poderíamos utilizar um tipo de dados do mongoose que é o mongoose.Schema.Types.Mixed, que deixa o campo livre pra receber qualquer tipo de dado, porém você teria que fazer algumas alterações no seu LivroController, para que na hora de buscar o livro ele verifique se o conteúdo do campo 'autor' é um Id válido da coleção de autores ou não antes de fazer o populate. Para isso precisaríamos tratar de alguns conceitos a mais, como funções assíncronas, arrays, coisas que não abordei nesse primeiro curso.
Geralmente, ao modelar a aplicação você já vai conseguir ter uma visão do que pode estar incluído na mesma coleção e o que idealmente deverá ser separado e associado por id.
Se tiver alguma consideração ou dúvida, não deixe de nos avisar por aqui.
Bons estudos! 😄
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!