'use strict'
const mongoose = require('mongoose');
mongoose.connect("mongodb://host:port/db", {});
mongoose.connection.on('error', console.error.bind(console, 'DB connection failed', arguments));
mongoose.connection.once('open', console.log.bind(console, 'Connected to DB'));
class Base extends mongoose.Model {
save() {
console.log('Base class save()')
return super.save();
}
findOne(query){
console.log('Base class find...');
return super.findOne(query);
}
}
class Derived extends Base{
save(){
console.log('Derived class save()');
super.save();
}
static getOne(){
console.log('Derived class Get one');
return this.findOne({});
}
}
let usersSchema = new mongoose.Schema({ name: String })
usersSchema.loadClass(Derived);
let User = mongoose.model(Derived, usersSchema, 'users');
setTimeout(function(){
User.getOne()
.then(user => console.log('Found user...', user));
let newUser = new User();
console.log('newUser instance of Derived ? ', (newUser instanceof Derived));
console.log('newUser instance of Base ? ', (newUser instanceof Base));
newUser.name = 'Tony';
newUser.save()
.then(result => console.log('Saved', result));
}, 2000);