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

Posted

技术标签:

【中文标题】在导出的 Mongoose 模型中使用 Mongoose 模式函数【英文标题】:Using a Mongoose Schema Function Inside Of An Exported Mongoose Model 【发布时间】:2017-06-07 06:13:16 【问题描述】:

我最近一直在研究一个身份验证系统,如果不存在具有给定 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
    
  );

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

如果我现在在我的 app.js 中创建了一个函数 existsWithId(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 方面的一些经验,我不是这方面的专业人士。

如果你们中的任何人需要提供额外的代码来回答问题,请随时问我,我会这样做。另外,我还不能 +rep 回答,但我总是很感激他们 :)

【问题讨论】:

现在您可以 +rep 答案 【参考方案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);
);

【讨论】:

效果很好,谢谢!一个问题。我还不太了解猫鼬的整个“findByID”概念:我现在如何将user 对象设置为现有对象(我尝试了user = User.findOne( _id: id );,但显然返回了其他东西。)[编辑:我只记得,完全一样(回调,arrgh)] 这是异步的,你可以通过回调得到结果:User.findOne( _id: id , function(err, res) console.log(res); var user = res; );。如果您不指定回调函数,除非您调用 exec(),否则它不会执行,请参阅:***.com/questions/31549857/… 出于某种原因,这只会返回我认为类似于exists 的布尔值。我在这里可能有一个非常明显的错误,但我现在似乎找不到它。这是函数的完整代码:pastebin.com/2FCXkrF4 user.data = data;console.log(exists);user.save();必须进入findOne的回调,当用户被找到时

以上是关于在导出的 Mongoose 模型中使用 Mongoose 模式函数的主要内容,如果未能解决你的问题,请参考以下文章

mongo 进阶之—— mongoose 基本操作

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

使用Mongoose(ORM)将多个应用程序与一个mongo数据库连接

查询未在 Mongoose 模型中定义的文档

在 Mongo 聚合中使用 Cursor() 和 Mongoose

Nest.js 模型依赖注入与 Mongoose 没有构造函数