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

Mongoose使用findOne校验用户是否存在时返回值始终为true问题求助

问题核心原因

checkUserExist是被async标记的异步函数,这类函数默认返回Promise对象,你在调用时没有添加await关键字等待数据库查询完成,拿到的userExist永远是一个Promise实例。在JavaScript的布尔判断规则中,所有非空对象都会被判定为true,这就是你的判断逻辑始终返回true的原因。
你之前尝试的判断都是针对入参userName本身的,完全没有触碰到异步查询的结果处理逻辑,因此无法解决问题。

修正方案

你需要同时修改两处代码:

  • 给调用异步方法的validateRegistrationData函数添加async标记,支持内部使用await
  • 调用checkUserExist时添加await关键字,等待数据库查询结果返回后再做判断

修正后完整代码

const checkUserExist = async (userName) => {
  return await userModel.findOne({userName});
};

// 新增async标记
const validateRegistrationData = async (inputData) => {
  const {userName} = inputData;
  // 新增await等待异步结果返回
  const userExist = await checkUserExist(userName);

  if (userExist) {
    console.log('User found')
  } else {
    console.log('User not found')
  }
};

可选优化

如果你只需要判断用户是否存在,不需要返回完整的用户文档,建议使用Mongoose内置的exists方法,查询性能更高,直接返回布尔值:

// 优化后的存在性校验方法
const checkUserExist = async (userName) => {
  return await userModel.exists({userName});
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:24:08