【问题标题】:why mongoose findOne returning null为什么猫鼬 findOne 返回 null
【发布时间】:2020-01-01 22:46:24
【问题描述】:

我不知道为什么当我通过邮递员访问 api 端点时,这只猫鼬 findOne 总是返回 null


exports.updateUserPassword = async(req,res) =>{
   const user = await User.findOne({
        resetPasswordExpires:{ $gt:Date.now() },
        resetPasswordToken:req.params.token

    })
    if(!user){
        res.json({"msg":"Password is invalid or has been expired"})
    }
}

当我 console.log 时在终端上,然后我得到了这个

{
    _id: 5e4553309d0e232a60gc8b6a,
    userName: 'Dan_rey',
    userType: 'Group',
    email: 'dan123@gmail.com',
    password: '$2b$10$lq6BYYckKkOtY.as.EILMe7a.njPyBrHauxMlFfianxmSwdmiAT12',
    date: 2019-12-29T19:49:04.608Z,
    __v: 0,
    resetPasswordExpires: 2019-12-30T19:04:05.874Z,
    resetPasswordToken: '65bc534656b321907c5af968b13d0a44f41de73b'
  }

但我只想要这两个,当我使用猫鼬 findOne 时 1) 重置密码过期, 2) 重置密码令牌

非常感谢任何帮助。

【问题讨论】:

  • 最可能的原因是数据库中没有匹配的记录。
  • 但如果我使用 mongoose Find() 命令,那么它将返回所有文档:resetPasswordToken 和 resetPasswordExpires @SergioTulentsev
  • 你能添加应该找到的文件吗?还有 req.params.token 值
  • 是的,当然@SuleymanSah
  • 我们需要查看json格式的文档

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

这可能是因为 Date.now() 返回日期的纪元格式,但您存储的格式不同。 Mongo 无法找到具有该条件的任何文档,因此它返回零结果。 要获取 ISO 格式的日期,请使用 new Date() 而不是 Date.now()

为了验证这一点 - 您可以在 mongodb 中插入以下文档作为以下正文的 insertOne -

db.collection_name.insertOne({
    date_format_1: Date.now(),
    date_format_2: new Date()
})

点击以下链接了解更多详情 - https://docs.mongodb.com/manual/reference/method/Date/

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2020-02-03
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多