2013-10-31 27 views
1

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

我已经试过这样:

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不是一个函数。

回答

5

方法和静态不一样。前者在文档(模型实例)上找到,而后者在模型上。如果上述预期被用作一个静态的,创建一个用户或什么的,你会:

userModel.saveUser(); 

不过,我实在看不出有什么好,因为你不传递任何数据,会做。如果改为创建它作为一种方法它是这样的:

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

你会说它是这样的:

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

不知道你真正想做的事,很难说哪种方法是什么最好在你的情况。

+0

我在'user = new this()'=>“对象不是函数”时得到一个错误“ – user1772306

+0

哦,对不起,它不需要运行新的this(),因为您已经创建了一个新的文档。我会编辑我的答案。 –

2

静使用,当你想要做的模型相关的东西(如“findAllByFirstName”) 他们不是用模型的实例进行交互(用户将模型的实例)

如果您想要将模型的实例保存到mongo中,那么方法就是要走的路。

+0

如何将这样的方法是什么样子? – user1772306

+0

呃,.save ?! - http://mongoosejs.com/docs/api.html#model_Model-save – Alex

1

可能是你想做的事somethig这样的:

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(...)