Q:

Problema rellenando objeto con node y mongodb

Tengo la siguiente función
function getParadas(req,res){

  var find;
  let paradas ={
    paradasMetro:[],
    paradasCercanias:[],
    paradasBus:[]
  }
  var find1= ParadasMetro.find().sort('nombre_parada');
  var find2= ParadasCercanias.find().sort('nombre_parada');
  var find3= ParadasBus.find().sort('nombre_parada');

    find1.exec((err,paradasM) => {
      if(err){
        console.log('Error en la peticion(Paradas metro)');
      }else{
        if(!paradasM){
          console.log('No hay paradas de metro');
        }else{
          paradas.paradasMetro=paradasM;
        }
      }
    });

    find2.exec((err,paradasC) => {
      if(err){
        console.log('Error en la peticion(Paradas cercanias)');
      }else{
        if(!paradasC){
          console.log('No hay paradas de cercanias');
        }else{
          paradas.paradasCercanias=paradasC;
          console.log(paradas);
        }
      }
    });

    find3.exec((err,paradasB) => {
      if(err){
        console.log('Error en la peticion(Paradas bus)');
      }else{
        if(!paradasB){
          console.log('No hay paradas de bus');
        }else{
          paradas.paradasBus=paradasB;
        }
      }
    });
    console.log(paradas);

      res.status(200).send({
      paradasResponse:paradas,
    });

}

Mi problema es a la hora de rellenar el objeto paradas. Cuando llega al console.log(paradas) de dentro de la funcion find2.exec() me pinta lo siguiente:
{ paradasMetro: [],
  paradasCercanias:
   [ { _id: 598c9fe410ebd9a7a9445c52,
       nombre_parada: 'Aeropuerto T4',
       lineas: '1' },
    /*Muchas mas paradas*/
     { _id: 598c9fe410ebd9a7a9445bf2,
       nombre_parada: 'Zarzaquemada',
       lineas: '5' } ],
  paradasBus: [] }

Es decir, me reconoce el objeto paradas creado arriba pero me lo reinicia en la ejecución de cada find#.exec ya que para cuando ha llegado a este console.log() ya ha pasado por el find1.exec() y ha tenido que llenar el de paradas.paradasMetro, pero me lo pinta vació. Y ya cuando llega al console.log() del final, me pinta todos los objetos vacíos
{ paradasMetro: [], paradasCercanias: [], paradasBus: [] }

¿Alguna idea de porque puede ser?
Gracias de antemano!

A:

Parece que es porque tus consultas se hacen asincróncamente, no sincrónicamente. Es decir, tu res.status(200).send() se ejecuta al final mientras las consultas pueden o no haber terminado sus oepraciones y cambiado tu objeto. 
Primero te recomiendo reestructurar tus peticiones así:
 find1.exec((err,paradasM) => {
  if(err)
    console.log('Error en la peticion(Paradas metro)');

  if(!paradasM){
    console.log('No hay paradas de metro');

  paradas.paradasMetro=paradasM;
});

Es más limpio sin tener tantas llaves.
Y segundo, puedes colocar los callbacks anidados pero te dará un callback hell (anti patrón que te hace el código inmantenible), por lo tanto te sugiero usar promesas, puedes consultar sobre ellas aquí o aquí

