Isso está acontecendo devido à natureza assíncrona e não bloqueante do nó js. Isso significa que qualquer atividade que demore muito para ser concluída, como acesso a arquivos, comunicação de rede e operações de banco de dados, é solicitada e colocada de lado até que os resultados estejam prontos e retornados através de uma função de retorno de chamada.
É por isso que você fica indefinido, porque enquanto a operação db está acontecendo, o console externo é executado devido à natureza não bloqueante.
Para obter o resultado, você pode fazer isso
app.get('/home',(req, res)=>{
establishment.findOne({_id : "57d83a867d3ba20fcb657dc7" } , (err, estab)=>{
if(err){
return res.send(err);
}
console.log("inside the function: "+estab.name);
// what ever proccing you need to do with result do here and finally return res
res.json(estab)
});
})