Mikhail Rybalka
Mikhail Rybalka

Reputation: 75

how use Schema methods in mongoose sub-documents after loading

I have the following scheme in the mongoose

var Schema = mongoose.Schema;

var CellSchema = new Schema({
    foo: Number,
});

CellSchema.methods.fooMethod= function(){
    return 'hello';
};


var GameSchema = new Schema({
    field: [CellSchema]
});

if create new document like:

var cell = new CellModel({foo: 2})
var game = new GameModel();
game.field.push(cell);

game.field[0].fooMethod();

it's correctly work. But if you run this code:

GameModel.findOne({}, function(err, game) {
    console.log(game);
    game.field[0].fooMethod()
})

i get TypeError: game.field[0].fooMethod is not a function and console log is

{ 
  field: 
   [ { foo: 2,
       _id: 5675d5474a78f1b40d96226d }
   ]
}

how correct load sub-document with all schema methods?

Upvotes: 1

Views: 683

Answers (1)

laggingreflex
laggingreflex

Reputation: 34667

You have to define the methods on the embedded schema before defining the parent schema.

Also you have to reference CellSchema instead of 'Cell'

var CellSchema = new Schema({
    foo: Number,
});
CellSchema.methods.fooMethod = function() {
    return 'hello';
};

var GameSchema = new Schema({
    field: [CellSchema]
});

Upvotes: 1

Related Questions