2015-10-30 3 views
2

Я хочу расширить модель с помощью нового метода «create». Он будет проверять требования к созданию документа, создавать дополнительные документы и так далее. Обычно я называюНовый документ от метода мангуста

var user = new User({}); 

Но как я могу создать документ с самого метода мангустов? То есть

User.methods.create = function(userObject,callback){ 
    //some checks 
    var doc = ???; 
    doc.save(function(err){ 
     if(err) return callback(err); 
     //saving done 
     callback(null,doc); 
    }); 
} 

UPD:

Thx к @ chridam Ответим мой окончательный код теперь выглядит следующим образом:

User.statics.create = function(userObject,callback){ 
    //some checks 
    var doc = this.model('User')(userObject); 
    doc.save(function(err){ 
     if(err) return callback(err); 
     //saving done 
     callback(null,doc); 
    }); 
} 

ответ

4

статика позволит для определения функций, которые существуют непосредственно на модели, так что вместо модели экземпляра (как вы пытались), определить метод static на User класса. Пример:

var userSchema = new Schema({ firstname: String, lastname: String }); 

// assign a function to the "statics" object of our userSchema 
userSchema.statics.create = function (userObject) { 
    console.log('Creating user'); 
    // use Function.prototype.call() to call the Model.create() function with the model you need 
    return mongoose.Model.create.call(this.model('User'), userObject); 
}; 
+1

Красиво сделано! Я был в середине ответа. – inspired

+0

Итак, метод «static», определенный в Schema, будет методом для всех документов, созданных с помощью модели, тогда как метод «instance» является методом для одного документа. Я правильно понял вас? – BadVolt

+1

Не было бы проще использовать 'return this.create (userObject, callback)' в статическом методе вместо этого? Вам также не хватает части обратного вызова. – JohnnyHK

0

Я знаю, что это не отвечает на ваш вопрос точно, но это может быть то, что ты ищешь.

ЗАКАНЧИВАТЬ мангуст межплатформенного http://mongoosejs.com/docs/middleware.html

Существует предварительно сохранить крюк, где вы можете сделать некоторые проверки и другие вещи, такими как создание документа.

+0

Да, я знаю о промежуточном программном обеспечении и предварительном сохранении, но я использовал метод «create» только в качестве примера. Будет создано множество методов, которые будут создавать документы. – BadVolt