【问题标题】:Mongoose/NodeJS defining static/method for saving a documentMongoose/NodeJS 定义用于保存文档的静态/方法
【发布时间】:2016-07-21 04:30:37
【问题描述】:

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

我试过了:

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    方法和静态是不一样的。前者存在于文档(模型实例)中,而后者存在于模型中。如果以上打算用作静态,创建用户或其他东西,您会:

    userModel.saveUser();
    

    但是,由于您没有向其传递任何数据,因此我真的看不出这有什么好处。如果您改为将其创建为方法,它会如下所示:

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

    你会这样称呼它:

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

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

    【讨论】:

    • 'user = new this()' => “object is not a function”出现错误
    • 抱歉,它不需要运行 new this(),因为您已经自己创建了一个新文档。我将编辑我的答案。
    【解决方案2】:

    当你想做与模型相关的事情时使用静态(比如“findAllByFirstName”) 它们不适用于与模型实例交互(用户将是您模型的实例)

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

    【讨论】:

    • 这样的方法会是什么样子?
    【解决方案3】:

    也许你想做这样的事情:

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

    【讨论】:

      猜你喜欢
      • 2019-02-09
      • 2012-09-07
      • 1970-01-01
      • 2019-01-06
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2012-11-05
      相关资源
      最近更新 更多