【问题标题】:Mongoose findOne() returns an empty objectMongoose findOne() 返回一个空对象
【发布时间】:2018-04-03 03:17:55
【问题描述】:

我正在使用findOne() 查找一个文档 我的文档将 userid 作为用户模型中的键之一。

示例

{
   userid: 1,
   name: 'John'
}

现在,当我执行以下操作时,我可以将此文档作为对象接收

users.findOne({userid: 1}, function(e, data){
   if(e){
      return (res.send('Failed'))
   }else{
      return (res.send(data))
   }
});

但是,如果我尝试动态提交 userid 的相同值,那么 data obj 将返回 null,但仍然不会执行 if(e) 语句。

示例

users.findOne({userid: req.body.userid}, function(e, data){
   if(e){
      return (res.send('Failed'))
   }else{
      return (res.send(data))
   }
});

我在控制台记录了req.body.userid 的值,并在我动态传递它时检查它是否为 1。

我做错了什么? req.body.userid 的值是否未正确传递给 userid 键?

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    如果您尝试使用变量传递过滤器值,则需要使用过滤器对象正确设置它

    检查下面的代码

    var key = "userId"; //example
    var value = req.body.userId;
    var filter = {};
    filter[key] = value;
    
        user.model.findOne(filter, function(e, data){
           if(e){
              return (res.send('Failed'))
           }else{
              return (res.send(data))
           }
        });
    

    【讨论】:

    • 现在 if(e) 执行并且错误说我有一个转换错误。“name”:“CastError”,另外,我已经确保 req.body.userid 的值是整数。
    • console.log 的值req.body.userid、typeof req.body.userid 和parseInt(req.body.userid) 能够看到来自请求的内容和userid 的类型...因为错误意味着parseInt 函数结果是 NAN 这意味着 req.body.userid 不是数字字符串,甚至不是数字
    • 文档中预期的userid类型是数字,req.body.userid的typeOf也是数字。
    • 但是如果parseInt 是一个数字,它如何返回NAN? ...除此之外,我在您的代码中看不到任何可能的错误...。您记录的值可能与您传递给 findOne 过滤器的值不同?也许你有错字?好像它应该是一个数字,它应该正确地parseInt
    • 可能您的变量未正确传递给过滤器...我更新了答案...我认为这对您有用...只需根据您的真实代码在过滤器对象中添加正确的值
    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 2017-08-18
    • 2013-01-17
    • 2022-10-19
    • 1970-01-01
    • 2016-10-08
    • 2018-06-09
    • 2021-09-03
    相关资源
    最近更新 更多