Mongoose find (), ¿cómo acceder a los documentos de resultados?

Acabo de empezar a jugar con mangosta y mongo. Tengo el siguiente código:

var ninjaSchema = mongoose.Schema({
    name: String,
    skill: Number
});

var Ninja = mongoose.model('Ninja',ninjaSchema);

module.exports = {
init : function(){
    console.log('Connecting to database');
    mongoose.connect('mongodb://localhost/mydb');
    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function callback () {
      console.log('Successfully connected!');
    });
},
createNinja : function(name,skill){
    var n = new Ninja({name:name,skill:skill});
    n.save(function(err,n){
        if (err)
            console.log('saving failed');
        console.log('saved '+ n.name);
    });
},
getNinjas : function(){
    var res = null;
    res = Ninja.findOne({},'name skill',function(err,docs){
        if (err)
            console.log('error occured in the query');
        return 'ninja name: '+docs.name+' ninja skill: '+docs.skill;
    });

    return res;
}

No hay ningún problema en agregar entradas a la base de datos, pero tengo problemas para recuperarlas. Estoy un poco confundido acerca de cómo funciona todo esto. Mi entendimiento es el siguiente:

Están los esquemas, que son como clases en oop, así que solo un modelo para un registro en la base de datos. El modelo es un registro, está bien, quizás un poco más, ya que vi que se puede agregar un método al modelo. Bueno ... realmente no entiendo cómo usarlos. ¿Puedes darme una pista de lo que realmente son?

Volver al tema: cuando se emite el comando de búsqueda, se llama a la función anónima y los documentos deben ser el resultado, ¿no? Ahora, ¿cómo puedo acceder a ellos? Desde ahora si registro la resolución obtengo lo siguiente:

{ options: {},
safe: undefined,
_conditions: {},
_updateArg: {},
_fields: { name: 1, skill: 1 },
_geoComparison: undefined,
op: 'findOne',
model: 
{ [Function: model]
 base: 
  { connections: [Object],
    plugins: [],
    models: [Object],
    modelSchemas: [Object],
    options: {} },
 modelName: 'Ninja',
 model: [Function: model],
 db: 
  { base: [Object],
    collections: [Object],
    models: {},
    replica: false,
    hosts: null,
    host: 'localhost',
    port: 27017,
    user: undefined,
    pass: undefined,
    name: 'mydb',
    options: [Object],
    _readyState: 1,
    _closeCalled: false,
    _hasOpened: true,
    _listening: true,
    _events: [Object],
    db: [Object] },
 schema: 
  { paths: [Object],
    subpaths: {},
    virtuals: [Object],
    nested: {},
    inherits: {},
    callQueue: [],
    _indexes: [],
    methods: {},
    statics: {},
    tree: [Object],
    _requiredpaths: [],
    options: [Object],
    _events: {} },
 options: undefined,
 collection: 
  { collection: [Object],
    opts: [Object],
    name: 'ninjas',
    conn: [Object],
    queue: [],
    buffer: false } } }

Tambien si usoNinja.find(...,function(err,docs){ ... }) ¿Cómo voy a través de los documentos? ¿O cómo recupero mis registros?

Respuestas a la pregunta(1)

Su respuesta a la pregunta