You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提交房间预订后MongoDB部分字段为空问题求助

房间预订字段更新为空问题排查与解决

提交房间预订请求后,MongoDB中Booked_Status字段已成功更新为true,但customerName、date、startTime、endTime字段虽已添加却为空。

相关代码

router.post('/booking',async(req,res)=>{
  await client.connect()
  try{
    data={
      customerName:"",
      date:"", 
      startTime:"",
      endTime:"",
      room_ID:""
    }
    const db =await client.db(dbName)
    let requests = await db.collection('RoomCreation').find({room_ID:req.body.room_ID}).toArray();//获取数据
    console.log(requests)
    
    if(requests[0].Booked_Status===true){
      res.send({
        statusCode:400,
        message:"房间已被预订"
      })
    }
    else{
      let postroom=await db.collection('roombook').insertOne(req.body);//在另一个集合中创建记录
      let room=await db.collection("RoomCreation").findOneAndUpdate({room_ID:req.body.room_ID},{$set:{Booked_Status:true,customerName:req.body.customerName,date:req.body.date,startTime:req.body.startTime,endTime:req.body.endTime}}) //更新主集合中的字段
      console.log(room)
      res.send({
        statusCode:200,
        data:room,
        data:postroom,
        message:"房间预订成功"
      })
    } 
   
  }
  catch(error){
    console.log(error)
    res.send({
      statusCode:500,
      message:"内部服务器错误",
      booked:false,
      error
    })
  }
  finally{
    client.close()
  }        
})

请求输入

{
"Customer_Name":"kranthi",
"Date":"03-01-2022",
"Start_Time":"19:00",
"End_Time":"23:00",
"room_ID":"201"
}

MongoDB输出

_id:6340d27d827a4536d5b0a952
room_ID:"201"
Seats_Available:5
Amenities: Array
Price:"8000"
Booked_Status:true
customerName:null
date:null
endTime:null
startTime:null

问题原因与解决方法

问题核心是请求参数的键名与代码中读取的键名不匹配:

  • 请求里的用户信息键名是Customer_Name、Date、Start_Time、End_Time(首字母大写+下划线分隔)
  • 代码中读取的是req.body.customerName、req.body.date(驼峰命名)

JavaScript是大小写敏感的,两者属于不同属性,导致代码读取不到请求中的值,最终更新到MongoDB的字段为空。

修改findOneAndUpdate中的$set部分,对应正确的请求键名即可:

let room=await db.collection("RoomCreation").findOneAndUpdate(
  {room_ID:req.body.room_ID},
  {
    $set:{
      Booked_Status:true,
      customerName:req.body.Customer_Name,
      date:req.body.Date,
      startTime:req.body.Start_Time,
      endTime:req.body.End_Time
    }
  }
)

如果需要更规范的参数处理,也可以先做键名映射:

const { Customer_Name, Date, Start_Time, End_Time, room_ID } = req.body;
const bookingData = {
  customerName: Customer_Name,
  date: Date,
  startTime: Start_Time,
  endTime: End_Time,
  room_ID
};
// 后续使用bookingData进行插入和更新操作

内容的提问来源于stack exchange,提问作者Saiteja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:02:07