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

MongoDB findOne查询异常:传入不同coinId仍提示币种已存在

问题排查方案
  • 优先校验请求实际参数
    先确认你控制台打印的coinId取值和你Postman传入的是否完全一致:
    1. 检查是否存在前后空格、大小写拼写差异
    2. 确认是否有OPTIONS预检请求被路由到该接口:OPTIONS请求默认不会携带请求体,此时req.body.coinId为undefined,如果你的数据库中存在coinId为null、undefined或者缺省该字段的记录,findOne({coinId: undefined})会匹配到对应记录,触发重复判断
  • 核对Mongoose模型定义
    确认Coin模型中coinId的字段类型和你传入的参数类型是否匹配:比如模型定义coinId为Number类型,你Postman传的是字符串格式的数字,Mongoose查询时会自动做类型转换匹配到同值的数值类型记录,属于正常逻辑,按需调整字段类型或者参数传值格式即可
  • 确认数据库连接和脏数据
    1. 检查当前接口连接的数据库是否为你预期的测试库,避免误连已经存有对应coinId记录的生产库
    2. 查看你代码中打印的console.log(coinExists)结果,确认匹配到的记录的coinId是否真的和你传入的一致,排查是否有之前测试留下的脏数据
  • 额外优化建议
    可以在参数校验阶段先判断coinId是否为空,避免无意义的数据库查询:
    if (!coinId) {
      return res.status(400).send({ message: 'coinId is required' })
    }
    
    同时你当前代码在res.send之后直接throw new Error,如果没有配置对应的错误捕获逻辑,可能会导致进程抛出未捕获异常,建议改为return结束函数执行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:45:00