mongodb UnhandledPromiseRejection警告:CastError:vishaltyagi@gmail.com在模型“users”的路径“移动的”处,值“www.example.com”(类型字符串)转换为数字失败

1cosmwyk  于 2023-05-06  发布在  Go
关注(0)|答案(2)|浏览(143)
const express = require('express');
const app = express();
const Register = require('./model/register')
require('./db/conection');
app.use(express.json());

app.get('/' , async(req,res)=>{
    res.send("hello")
    
})
app.get('/search/:key',async(req,res)=>{
    let sKey=req.params.key;
    console.log(typeof(sKey));
    let searchData=await Register.findOne({'$or':[
        {name:sKey},
        {email:sKey},
        {address:sKey},
        {mobile:sKey}
    ]})
    res.send(searchData);
})
app.listen(5000,()=>{
    console.log("server start");
    console.log(`http://localhost:5000`)

});

我试图创建搜索API,通过电子邮件或移动的号码获取特定用户的详细信息,我的代码显示此错误:UnhandledPromiseRejectionWarning:CastError:在vishaltyagi@gmail.com模型“users”的路径“移动的”处,值“www.example.com”(类型字符串)转换为数字失败。
我的模型文件是-

const mongoose = require('mongoose')
//const {Schema} = mongoose
const registerSchema = new mongoose.Schema ({
name:String,
email:String,
address:String,
mobile:Number,
password:String,
date:{type:Date , default:Date.now}
});
const Register = mongoose.model('users',registerSchema);
module.exports= Register;
3pvhb19x

3pvhb19x1#

你能把你的密码-

let searchData=await Register.findOne({'$or':[
        {name:sKey},
        {email:sKey},
        {address:sKey},
        {mobile:sKey}
    ]})

我的代码,让我知道结果-

let searchData= await Register.find({email:{$regex:sKey, $options:'i'}})

这可能只适用于电子邮件。但先让我知道结果。我会帮助你更多。

iqxoj9l9

iqxoj9l92#

在registerSchema中,您已经将移动的字段定义为Number。因此,您必须将其设置为字符串或检测搜索值是字符串还是数字。如果值是一个数字,那么你可以添加一个自定义的where条件,如下所示。

let whereCondition = [
    {name:sKey},
    {email:sKey},
    {address:sKey}
];

if(typeof sKey == 'number'){
   whereCondition.push({mobile:sKey});
}

let searchData=await Register.findOne({'$or':[
    whereCondition
]});

相关问题