在导出的Mongoose模型中使用Mongoose模式函数

时间:2017-01-22 18:11:54

标签: javascript node.js mongodb express mongoose

我最近一直在开发一个身份验证系统,如果没有具有给定ID的用户在具有现有ID的用户中加载,则应该创建新用户。我还已经发现,您可以使用

返回用户是否存在ID
User.count({_id: id}, function (err, count){ 
    if(count > 0){
      // User exists, continue with loading data
    } else {
      // User does not exist, create one
    }
  });

用户是导出的Mongoose模型mongoose.model('User', UserSchema);

如果我现在在我的app.js中创建了一个函数existWithId(id),它将完美地工作(判断前面提到的代码完全正常 >),但我想将此函数移动到我的user.js模型(其中包含Mongoose / MongoDB代码),以便我只为该特定模型使用它。每当我尝试使用

做到这一点
UserSchema.statics.existsWithId = function(id) {
  this.count({_id: id}, function (err, count){ 
    return count > 0;
  }); 
}
但是,

或类似方法,只要我在app.js中运行它就会返回 undefined 或错误。

注意:我很抱歉,如果这是一个简单甚至是愚蠢的问题,但是考虑到使用Mongoose进行数据库管理,我很新,而且我确实有使用JS的一些经验,我不是一个专业人士。

如果您有任何人需要提供额外的代码来回答问题,请随时问我,我会这样做。此外,我还不能+回答答案,但我总是感谢他们:)

1 个答案:

答案 0 :(得分:1)

您的existsWithId方法异步返回一个值,因此您可以对其进行回调以获得结果,如下所示:

UserSchema.statics.existsWithId = function(id, cb) {
    this.count({ _id: id }, function(err, count) {
        cb(err, count > 0);
    });
}

User.existsWithId("5882c3be5aad09028d4d8b46", function(err, res) {
    console.log(res);
});