Dzieje się tak ze względu na nieblokującą, asynchroniczną naturę węzła js. Oznacza to, że każda czynność, której zakończenie zajmuje dużo czasu, taka jak dostęp do plików, komunikacja sieciowa i operacje na bazie danych, są żądane i odkładane na bok, dopóki wyniki nie będą gotowe i zwrócone za pomocą funkcji zwrotnej.
Właśnie dlatego stajesz się niezdefiniowany, ponieważ podczas operacji bazy danych konsola zewnętrzna jest wykonywana ze względu na nieblokujący charakter.
Aby uzyskać wynik, możesz to zrobić
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)
});
})