Está sucediendo debido a la naturaleza asíncrona y sin bloqueos del nodo js. Esto significa que cualquier actividad que tarde mucho tiempo en finalizar, como el acceso a archivos, la comunicación de red y las operaciones de base de datos, se solicita y se deja de lado hasta que los resultados estén listos y devueltos. a través de una función de devolución de llamada.
Es por eso que no está definido, porque mientras la operación db está sucediendo, la consola externa se ejecuta debido a la naturaleza no bloqueante.
Para obtener el resultado puedes hacer esto
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)
});
})