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

React+MongoDB求职网站:保存职位时无法通过_id检测已存在项

问题描述

我使用React和MongoDB开发求职门户网站,实现用户登录后保存职位的功能,已创建职位存储模型和控制器。在保存职位前,尝试通过req.params获取的_id和req.payload获取的userId检测该职位是否已存在,但检测失效,每次都会创建新的职位对象。

控制器代码
exports.savedJobsController = async (req,res) =>{

console.log("Inside Saved Jobs Controller");



const {title,salary,email,company,location,description,category,jobType,experience,vacancy,deadline} = req.body



const {id} = req.params



const userId = req.payload



console.log(`user id is : ${userId} and id is ${id}`);



try {



    const existingJob = await savedjobs.findOne({_id:id,userId})



    console.log(`exist ${existingJob}`);



    if(existingJob){



        res.status(406).json("Job Already Saved to Your Collection!")



    }else{



        const newJob = new savedjobs({



            title,salary,email,company,location,description,category,jobType,experience,vacancy,deadline,userId



        })



        await newJob.save()



        res.status(200).json(newJob)



        console.log(`Saved job is 



            ${newJob}



            `);



    }



     



} catch (error) {



    res.status(401).json(error)



    console.log(error);



}
问题分析与解决方案

以下是可能导致检测失效的原因和对应解决办法:

  • 查询条件逻辑错误
    你当前用{_id:id, userId}查询,这里的_id是MongoDB自动生成的文档ID,而非你要保存的职位本身的ID。要检测「用户是否已保存某一特定职位」,应该用职位的原始ID(比如模型里的jobId字段)作为查询条件,而非文档的_id。修改查询语句:

    // 假设模型中职位ID字段为jobId
    const existingJob = await savedjobs.findOne({jobId: id, userId})
    
  • 数据类型不匹配
    req.params.id是字符串类型,若模型中职位ID或userId是ObjectId类型,字符串和ObjectId无法匹配,导致查询不到数据。需要将字符串转为ObjectId:

    const mongoose = require('mongoose');
    // 转换职位ID
    const jobId = mongoose.Types.ObjectId(id);
    // 若userId也是字符串,同样转换
    const userObjectId = mongoose.Types.ObjectId(userId);
    const existingJob = await savedjobs.findOne({jobId, userId: userObjectId})
    
  • 字段名拼写/大小写不一致
    检查savedjobs模型中的字段名,比如是否是user_id而非userId,职位ID字段是否拼写错误。MongoDB字段名区分大小写,必须保证查询条件中的字段名和模型完全一致。

  • 日志排查辅助
    修改控制台日志,打印完整的查询条件和结果,方便定位问题:

    console.log('查询条件:', {_id:id, userId}, '查询结果:', existingJob);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:12:33