Bucle con devoluciones de llamada asíncronas en mongoose / mongodb / node

Soy nuevo en nodejs / mongo / mongoose y estoy tratando de hacer algo muy simple. Tengo los siguientes esquemas:

var authorSchema = mongoose.Schema({
    name: String,        
});
Author = mongoose.model('Author', authorSchema);

var bookSchema = mongoose.Schema({
    title: String,        
    isbn: String,
    pages: Number,        
    author: { type : mongoose.Schema.ObjectId, ref : 'Author', index: true }
});
Book = mongoose.model('Book', bookSchema);

Quiero crear una lista de autores con ID, nombre y número de libros para cada autor. Tengo algo como esto:

exports.author_list = function(req, res){
    Author.find({}, function (err, authors){
        var author_array = Array();
        for (var i=0;i<authors.length;i++){
            var author_obj = new Object();
            author_obj.id = authors[i]._id;
            author_obj.name = authors[i].name;
            author_obj.count = 0; //here is the problem 
            author_array[i] = author_obj;
        }
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.write(JSON.stringify({ authors: author_array }));
        res.end();

    });
}

Sé cómo hacer una consulta para el recuento. Mi problema es cómo hacer un bucle de los autores y rellenar el resultado con devoluciones de llamada asíncronas. ¿Cuál es la forma correcta de implementar esto en la moda de nodejs?

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta