为什么我无法对该mongoose集合成功执行map操作?
核心问题原因
Array.prototype.map() 方法不会修改原始数组,只会返回一个经过处理的新数组。你目前的代码里没有接收map返回的结果,处理后的数组直接被丢弃,所以后续打印和返回的还是从MongoDB查询到的原始数据。
额外说明:Mongoose的find()方法默认返回的是Mongoose文档实例数组,不是普通JS对象,如果仅需要提取字段值,建议在查询时追加.lean()方法,直接获得纯JS对象,既简化后续操作也能提升查询性能。
修复后代码
User.getUsers = function() { return new Promise(async (resolve, reject) => { try { // 追加lean()获取纯JS对象 let users = await ValidUser.find().lean() // 接收map返回的处理后数组 let processedUsers = users.map(function(user) { return { username: user.username, email: user.email } }) console.log(processedUsers) resolve(processedUsers) } catch { reject("404") } }) }
可选优化方案
你当前已经使用了async/await语法,无需额外手动包装一层Promise,可以简化为以下写法,功能完全兼容原有调用逻辑:
User.getUsers = async function() { try { const users = await ValidUser.find().lean() return users.map(user => ({ username: user.username, email: user.email })) } catch { throw "404" } }
内容的提问来源于stack exchange,提问作者Justin Christopher Domingo
相关产品推荐
相关产品推荐

