如何用多种条件做简单的mongoose findOne?

问题描述 投票:2回答:3

如何在多个条件下执行此findOne查询?或者替代方法(最好是同样简单的方法)如果不可能......

User.findOne({ 'email': email }, function (err, user) {

        if (err) {
            request.session.flash = {
                type: "danger",
                message: "Failed to log you in, error occurred."
            };
            response.redirect("/snippet/");
        }

我试过了

User.findOne({ 'email': email, 'pwd': pwd }, function (err, user) {

User.findOne({ 'email': email $and 'pwd': pwd }, function (err, user) {

User.findOne({ 'email': email}, $and: {'pwd': pwd}, function (err, user) {
node.js express mongoose find condition
3个回答
3
投票

尝试使用mongoose promise系统(.exec())。 query内部的.findOne()应该是一个单一的对象。

User
    .findOne({email: email, pwd: pwd})
    .exec(function(err, user){
        ...
    });

旁注 - 看起来这是用于验证用户登录。仅查询电子邮件可能是一种更好的策略,然后尝试匹配密码以提供更多深度的错误响应,而不是一揽子“无效登录”类型响应。

User
    .findOne({email: email}) //If not found, no user with that email exists
    .exec(function(err, user){
        var hashed_pwd = hashPassword(pwd);
        if(!hashed_pwd === user.pwd){
            //If they don't match, user entered wrong password
        }
        ...
    });

1
投票
User.findOne({ 'email': email, 'pwd': pwd }, function (err, user) {

这个语法是正确的。如果这没有返回任何结果,则表示您没有匹配任何记录。

我的猜测是你的pwd字段是哈希/加密的,你需要在你的pwd变量上运行相同的哈希/加密才能做这个findOne


0
投票

当mongoDB返回你的文档时,如果它没有找到Data那么它将返回null。你可以检查你的docs是否为null然后回复其他页面。另一方面,如果docs有数据响应下一页。

if(docs)
    respond("your content");
else
  respond("error page incorrect credentials")

我错误地认为它会创建一个异常err,但它不是一个错误它只是一个null数据。

© www.soinside.com 2019 - 2024. All rights reserved.