如何在保存在 Mongoose 之前检查数据库中是不是存在嵌入式文档

Posted

技术标签:

【中文标题】如何在保存在 Mongoose 之前检查数据库中是不是存在嵌入式文档【英文标题】:How to check if an embedded document exists in database before saving in Mongoose如何在保存在 Mongoose 之前检查数据库中是否存在嵌入式文档 【发布时间】:2013-03-26 09:54:04 【问题描述】:

我正在使用 Express、Mongoose 和 PassportJS 制作一个基本的身份验证系统。 我要做的是检查数据库中输入的用户名和密码是否已存在于数据库中。下面是我的示例代码:

//Post: /signup
app.post('/signup', function (req, res) 
  var username = req.body.person.user.username;
  var password = req.body.person.user.password;

  Person.user.find('username': username, function (err, user) 
    if (err) 
      console.log(err.name);
     else 
      console.log('User Found');
    
  );
);

问题是它返回这种错误:

TypeError: Cannot call method 'find' of undefined

谁能帮帮我。

【问题讨论】:

错误表示 Person.user 未定义...首先初始化一个对象,然后调用它的方法 【参考方案1】:

正如 robertklep 指出的那样,您没有正确检查用户的存在。此外,由于用户名很可能是唯一的,因此您可以只使用 findOne(findOne() 返回单个对象,而 find() 也可能返回单个对象但会将其包装在数组中)。

Person.findOne('username': username, function (err, user) 
  if (err) 
     console.log(err.name);
     return;
  
  if (!user)
    console.log('User not Found');
    return;
  
  console.log('User found');

);

【讨论】:

【参考方案2】:

我想你正在寻找这个:

Person.find( 'user.username' : username , ...)

FWIW,如果没有错误调用回调,这并不意味着找到了用户,它只是意味着执行查询时没有错误。但user 仍然可以为空,表示查询没有任何匹配结果。

【讨论】:

我试过那个方法,但问题是它返回以下错误:TypeError: Object first: 'Miguel', last: 'Lorenzo', _id: 515e3c2d99ebf01706000020, __v: 0, user: username :'MIGO123',密码:'123',启用:true,兄弟姐妹:[],就业:[],教育:[],母亲:附属:假,父亲:附属:假,地址: ,联系人: 没有“查找”方法 什么是Person?看来您正在用结果覆盖您的模型类。您能否也将您的架构添加到您的问题中?

以上是关于如何在保存在 Mongoose 之前检查数据库中是不是存在嵌入式文档的主要内容,如果未能解决你的问题,请参考以下文章

如何在更新期间检查该数据是不是已存在于数据库中(Mongoose And Express)

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

Mongoose ODM,保存前更改变量

Mongoose ODM,保存前更改变量

如何在 Mongoose 中使用预保存挂钩数据库值?