如何在Node.js中查询MongoDB指定email用户的orders数组全部内容
修复后的代码
exports.getOrders = async (req, res) => { const { email } = req.params; try { // 改用findOne查询单个用户,返回文档对象而非数组 const user = await User.findOne({ email }); if (!user) { // 找不到用户直接返回404响应 return res.status(404).json({ message: 'Sorry that user does not exist' }); } // 直接取用户文档下的orders数组即可,不需要额外查询 const userOrders = user.orders; // 单次返回响应,同时返回订单数据和提示信息 res.status(200).json({ message: `User: ${user.email} found!`, orders: userOrders }); } catch (error) { res.status(400).json({ error: error.message }) } }; // end of getOrders
核心修改说明
- 替换
User.find为User.findOne:find方法返回符合条件的文档数组,即使用户不存在也会返回空数组,会导致你的非空判断失效;findOne直接返回匹配的单个文档对象,符合按唯一邮箱查用户的场景 - 删除冗余的二次查询:你需要的是指定用户的全量订单,在查询到用户文档后直接读取
orders字段即可,不需要额外发起数据库查询 - 修复响应逻辑:原代码先调用
send再调用json会重复触发响应,抛出报错,调整为单次json返回,同时携带用户信息和订单数据 - 补充用户不存在时的响应返回:原代码仅打印日志,没有给前端返回对应提示,也没有终止后续逻辑执行,会触发后续报错
内容的提问来源于stack exchange,提问作者user17388101
相关产品推荐
相关产品推荐

