【问题标题】:Mongoose not returning, but mongo shell is猫鼬没有回来,但蒙戈壳是
【发布时间】:2015-03-15 09:27:23
【问题描述】:

我在我的节点应用程序上使用猫鼬,我想通过它的电子邮件得到一个卖家:

getSellerByEmail : function(email,next){
        var Seller = mongoose.model('Seller');
        console.log(inspect(email));
        Seller.findOne({'email' : new RegExp(email, 'i')}, function(seller){

            next(seller);
        });
    }

当我尝试登录时,猫鼬不会返回新用户。但是当我尝试使用相同的电子邮件创建另一个用户时,服务器会正​​确执行此函数并返回新用户。

还尝试使用{'email' : email},它返回null,但是当我在mongo shell 上执行此查询时,它正确返回。

db.sellers.findOne({email : 'email@email.email'});
{
   "_id" : ObjectId("54b94759b042bdbf19cb7b97"),
   "name" : "Nome da Empresa",
   "cnpj" : "123123123",
   "email" : "email@email.email",
   "password" : "$2a$08$6UvW8Bux3CwUMok8ac12Sehbd.xCHnVUI51ZwhtGKBjkSa6/MrqUu",
   "__v" : 0
}

我是 mongodb + mongoose 的新手,所以我知道这是一个愚蠢的问题,但我就是不知道出了什么问题……我还创建了一个 findSellerById() 函数,它运行良好。

编辑 1:

使用 Mongoose 调试,打印出来的内容如下:

Mongoose: sellers.findOne({ email: 'email@email.email' }) { fields: undefined }
Mongoose: sellers.findOne({}) { fields: undefined }

如您所见,也试过不带参数,没有成功...

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    传入findOne 的回调函数接受两个参数(error 和 doc),因此您将seller 视为错误参数而不是 doc 参数。

    所以你的函数应该是这样的:

    getSellerByEmail : function(email,next){
        var Seller = mongoose.model('Seller');
        console.log(inspect(email));
        Seller.findOne({'email' : new RegExp(email, 'i')}, function(err, seller){
            next(seller);
        });
    }
    

    【讨论】:

    • 它工作正常,非常感谢!但是你知道为什么它以前有效吗?
    • 我不能说,但这绝对是正确的方法。 :)
    【解决方案2】:

    我遇到了同样的问题,也许你可以试试这个:

    Seller.find({email: seller.email}, function(err, seller){
        console.log(seller);
    });
    

    这解决了我的问题,希望它也能解决你的问题!

    【讨论】:

    • 已经试过了,没有成功。我注意到另一件事,当卖家想要注册时,也会调用这个函数,所以我调用它来检查电子邮件是否已经在数据库中,并且它有效!它正确返回!真的,不知道为什么在登录时它没有。两个查询完全相同。我在mongoose.set('debug', true); 上检查了它们
    • @KayanAlmeida 您具体尝试了什么?关键是findfindOne 回调都接受两个参数,而不是一个。
    • @JohnnyHK 我用猫鼬调试输出编辑了我的答案,但正如我之前所说,这个findOne 之前被调用,以检查电子邮件的唯一性,并且工作正常。这是相同的功能,具有相同的输入。可能是连接问题?
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 2015-10-08
    • 2013-01-14
    • 2020-07-13
    • 2020-07-25
    • 2018-08-27
    • 2021-05-25
    相关资源
    最近更新 更多