MongoDB User.findOne(email:email)

Posted

技术标签:

【中文标题】MongoDB User.findOne(email:email)【英文标题】:MongoDB User.findOne(email:email)MongoDB User.findOne(email:email) 【发布时间】:2021-07-14 17:35:27 【问题描述】:

findOne 总是返回 null

我在数据库中有“user(hello@gmail.com)”数据,但 User.findOne 总是返回 null。请帮我。我有一个在后台运行的节点,但它给了我 null 。 req.body 给出了我通过但 findOne 不工作的电子邮件。 User.create 工作正常。但是像 find,findById,findOne 这样的搜索查询不起作用。有人请帮助我。

const userSchema = new mongoose.Schema(
 name: 
    type: String,
    required: [true, 'A user must have a unique name'],
    unique: true,
  ,
  password: 
    type: String,
    required: true,
    unique: true,
    minlength: 8,
  ,
  email: 
    type: String,
    required: [true, 'A user must have a unique name'],
    unique: true,
    lowercase: true,
  
const User = mongoose.model("User", userSchema);

exports.getTest=async (req,res)=>
    const email = req.body  // returns "hello@gmail.com"
    const user = await User.findOne(email)
    console.log(user) //returns null
    res.json(
     
        status:"success",
        data:
            user
        
    )


【问题讨论】:

您的电子邮件字段中可能有空格或不匹配。你的语法看起来是正确的,你不需要 exec()。三重检查所有假设,因为这些是万恶之源。 有人告诉我 .exec() 使 Mongoose 请求异步,我永远无法检查这是不是真的 这是我第二周试图找到我的错误。我找不到。这就是为什么我需要你们的帮助 【参考方案1】:

我感觉你的问题在于测试的前两行?

const email = req.body  // returns "hello@gmail.com"
const user = await User.findOne(email)

如果您的req.body 只返回电子邮件字符串,那么您的查询可能不是正确的 JSON 格式?

您确定查询实际上最终是 User.findOne(email: "hello@gmail.com") 而不仅仅是 User.findOne("hello@gmail.com")

也不确定最后是否需要exec(),but it does execute the query and return a Promise...

【讨论】:

User.findOne(email: "hello@gmail.com") 是的先生。我检查了百万次。查询不起作用,我不知道为什么【参考方案2】:

文档应在数据库中保存active: true。但相反,我将每个文档都保存为 false 作为默认值。因此,如果将来有人觉得它有用,请告诉我,这就是我的答案。保重,再见

【讨论】:

以上是关于MongoDB User.findOne(email:email)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDb 中的条件更新

nodejs mongodb对象ID到字符串

nodejs mongodb对象ID到字符串

使用 Mongoose 从 MongoDB 文档中删除一个键

如何使用 mongoose 在 MongoDB 数组中推送数据

Mongoose User.findOne 既不返回错误也不返回成功