2015-06-16 4 views
1

У меня есть модель со ссылками на другие документы. Я хотел бы иметь метод в этой модели, который может обрабатывать данные, используемые в ссылочных моделях.Население Mongoose в примерах методов

'use strict'; 

var mongoose = require('mongoose') 
    , Schema = mongoose.Schema 
    , deepPopulate = require('mongoose-deep-populate'); 

var MainSchema = new Schema({ 
    childs: [{type:Schema.ObjectId, ref: 'Child'}], //because many-to-one 
    startDate: {type: Date, default: Date.now}, 
    endDate: {type: Date}, 
}); 


MainSchema.methods = { 

    retrieveChilds: function(callback) { 

    // deepPopulation of childs not possible?? 

    callback(result); 
    }, 
}; 

MainSchema.plugin(deepPopulate); 

module.exports = mongoose.model('Main', MainSchema); 

, как показано в примере кода выше, функция retrieveChilds должна выполнять функцию deepPopulate на текущей схеме. Возможно ли это или должно произойти за пределами модели? (Что приводит к дублированию кода иногда)

ответ

0

В Mongoose instance methods, this является экземпляр документа метод вызывается на, так что вы можете сделать это:

MainSchema.methods = { 
    retrieveChilds: function(callback) { 
    this.deepPopulate('childs.subject.data', callback); 
    }, 
}; 

Тогда назвать:

main.retrieveChilds(function(err, _main) { 
    // _main is the same doc instance as main and is populated. 
}); 
+1

Спасибо, я попробовал это раньше, и он не работал тогда, по-видимому, я забыл, что обратный вызов имеет 2 аргумента, ошибку и возвращаемый объект. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^