Děje se tak díky neblokovací asynchronní povaze uzlu js. To znamená, že jakákoliv činnost, která trvá dlouho, než je dokončena, jako je přístup k souborům, síťová komunikace a databázové operace, jsou požadovány a odkládány, dokud nejsou výsledky připraveny a vráceny. prostřednictvím funkce zpětného volání.
To je důvod, proč se stáváte undefined, protože zatímco operace db probíhá, vnější konzola se provádí kvůli neblokovací povaze.
Chcete-li získat výsledek, můžete to udělat
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)
});
})