Why can't my kittens speak when I retrieve them from the db

Following the guide on http://mongoosejs.com/docs/index.html and I´m clearly misunderstanding something basic. Why isn't the shema being applied to objects I retrieve?

The Code

mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/local');
db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
    // yay!
});

var kittySchema = mongoose.Schema({
    name: String
})
kittySchema.methods.speak = function () {
    var greeting = this.name
        ? "Meow name is " + this.name
        : "I don't have a name"
    console.log(greeting);
}
var Kitten = mongoose.model('Kitten', kittySchema)
var silence = new Kitten({ name: 'Silence' })
var fluffy = new Kitten({ name: 'fluffy' });
silence.save(function (err, silence) {
    if (err) // TODO handle the error
        console.log(err.message);
    else
        silence.speak();
});
fluffy.save(function (err, fluffy) {
    if (err) // TODO handle the error
        console.log(err.message);
    else
        fluffy.speak();
});
Kitten.find(function (err, kittens) {
    if (err) // TODO handle err
        console.log(kittens)
    else {
        for (var kitten in kittens) {
            kitten.speak();
        }
    }
});

The Output

Path\TestEx\node_modules\mongoose\lib\utils.js:413
        throw err;
              ^
TypeError: Object 0 has no method 'speak'
    at Promise.<anonymous> (Path\TestEx\app.js:66:20)
    at Promise.<anonymous> (Path\TestEx\node_modules\mongoose\node_modules\mpromise\lib\promise.js:162:8)
    at Promise.EventEmitter.emit (events.js:95:17)
    at Promise.emit (Path\TestEx\node_modules\mongoose\node_modules\mpromise\lib\promise.js:79:38)
    at Promise.fulfill (Path\TestEx\node_modules\mongoose\node_modules\mpromise\lib\promise.js:92:20)
    at C:\Users\Richard\WebstormProjects\TestEx\node_modules\mongoose\lib\query.js:1716:26
    at model.Document.init (Path\TestEx\node_modules\mongoose\lib\document.js:243:11)
    at completeMany (Path\TestEx\node_modules\mongoose\lib\query.js:1714:12)
    at cb (Path\TestEx\node_modules\mongoose\lib\query.js:1677:11)
    at Path\TestEx\node_modules\mongoose\lib\utils.js:408:16

You have an error in your JavaScript. Check the documentation for for ... in loop. It iterates over the fields of an object, not over an array. So, instead of for ... in loop you should use an ordinary for loop with iterator:

for (var i = 0; i < kittens.length; i++) {
  kittens[i].speak();
}