Mongoose / NodeJS定义用于保存文档的静态/方法

时间:2013-10-31 10:27:48

标签: node.js mongodb mongoose

我想定义自己的静态/方法,保存我的模型文档。

我试过这个:

userSchema.statics.saveUser = function(data, callback){
    data.save(callback);
};

它说data.save()不是一个函数。它无法识别该功能。

然后我尝试了这个

userSchema.statics.saveUser = function(data, callback){
    data = new userSchema(data);
    data.save(callback);
};

userSchema不是一个函数。

3 个答案:

答案 0 :(得分:5)

方法和静力学不一样。前者在文档(模型实例)上找到,而后者在模型上找到。如果上述内容旨在用作静态,创建用户或其他内容,您可以:

userModel.saveUser();

然而,由于你没有传递任何数据,我真的没有看到会有什么好处。如果您将其创建为方法,它将如下所示:

userSchema.methods.saveUser = function(callback){
    user.save(callback);
};

你会这样称呼:

var doc = new userModel();
// Set stuff
doc.saveUser();

在不知道你真正想做什么的情况下,很难说哪种方式更适合你的情况。

答案 1 :(得分:2)

当您想要进行与模型相关的内容(例如“findAllByFirstName”)时,会使用静态 它们不是用于与模型实例交互(用户将是模型的实例)

如果要将模型实例保存到mongo中,则可以采用方法。

答案 2 :(得分:1)

你可能想做这样的事情:

schema.statics.user = function() {
    var model = this.model("user");
    return {
        login:require('./resources/user/login.js'),
        signin:require('./resources/user/signin.js')
    }
}
var model = mongoose.model("<name>",schema);
var user = model.user();
user.login(...)
user.signin(...)