Sta accadendo a causa della natura asincrona e non bloccante del nodo js. Ciò significa che qualsiasi attività che richiede molto tempo per essere completata, come l'accesso ai file, la comunicazione di rete e le operazioni sul database, viene richiesta e messa da parte fino a quando i risultati non sono pronti e restituiti tramite una funzione di richiamata.
Ecco perché stai diventando indefinito, perché mentre l'operazione db sta avvenendo, la console esterna viene eseguita a causa della natura non bloccante.
Per ottenere il risultato puoi farlo
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)
});
})