繁体   English   中英

如何在 mongoDB 数据库中找到一个

[英]How to findOne in mongoDB Database

我目前正在开发我自己的 API,为此我想以一种特定的方式保存 userData,我向你展示。

{
    "OzopdBz1oJSrbhCUd2Dr153DEicFA2du881a4Qr934O1FKo4rpELzAh06eQQ7v":{
        "userAccountData":{
            "userEmail": "myemail@mail.com",
            "userPassword": "QWERTY",  <--- Obvisly will be encrypted
            "userCellphoneNumber": 1234567890,
            "userFullName": "John White",
            "userBirthDate": "01-16-2003"
        },
        "userPublicData":{
            "userDisplayName": "JW",
            "userProfilePhotoURL": "https:www..."
        }
    }
}

我的用户架构是下一个

const mongoose = require('mongoose')

const userSchema = mongoose.Schema({

    userAccountData:{
        userEmail: String,
        userPassword: String,
        userCellphoneNumber: Number,
        userFullName: String,
        userBirthDate: String,
        userRoles: [{
          type: mongoose.Schema.Types.ObjectId,
          ref: "schemaRole"
        }]
      },
      userPublicData:{
        userDisplayName: String,
        userProfilePhotoURL: String
      }

})

module.exports = mongoose.model('User', userSchema)

如您所见,userEmail 位于 userAccountData 内,而我验证电子邮件是否已在数据库中的过程是下一个

async function checkForDuplicatedEmail (req,res) {

    const userEmail = req.body.userEmail

    if(!userEmail) return res.json({
        status: 200,
        message: 'email not provided',
        data: {}
    })

    const isEmailDuplicated = await user.findOne({userEmail: userEmail})

    if(isEmailDuplicated) return res.json({
        status: 200,
        message: "true",
        data: {}
    })

    res.json({
        status: 200,
        message: "false",
        data: {}
    })
}

所以问题在于,当我发送请求时,响应总是正确的,即使电子邮件不在数据库中,我是否做错了什么? 你能帮我吗?

这是我解决问题的方法

userSchema是错误的,大多数是这样的

const userAccountDataSchema = mongoose.Schema({
    userEmail:String,
    userPassword: String,
    userCellphoneNumber: Number,
    userFullName: String,
    userBirthDate: String
})

const userPublicDataSchema = mongoose.Schema({
    userDisplayName: String,
    userProfilePhotoURL: String
})

const userSchema = mongoose.Schema({
    userAccountData:userAccountDataSchema,
    userPublicData:userPublicDataSchema
})

那么, findOne必须是这样的:

const isEmailDuplicated = await user.findOne({
    'userAccountData.userEmail': userEmail
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM