猫鼬没有回来,但是mongo shell是

时间:2015-01-16 17:39:15

标签: javascript node.js mongodb express mongoose

我在我的节点应用上使用mongoose,我希望通过电子邮件获得卖家:

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

            next(seller);
        });
    }

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

还尝试使用{'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的新手,所以我知道这是一个愚蠢的问题,但我不能意识到什么是错的......我还创造了一个{{ 1}}功能,它完美地运作。

编辑1:

使用Mongoose调试,这是它打印的内容:

findSellerById()

正如你所看到的,也试过没有参数,没有成功......

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

传递给findOne的回调函数有两个参数(错误和文档),因此您将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);
    });
}