Express中Mongoose查询MongoDB最后一条文档结果异常如何解决
问题根因
Mongoose 所有查询方法默认返回的是 Query 查询对象实例,而非直接的数据库返回结果。你当前代码没有等待异步查询执行完成,直接打印Query实例,自然会看到冗长的模型相关对象,拿不到目标文档。
修复方案
Mongoose 查询是异步IO操作,必须通过await或者.then()接收最终执行结果,推荐两种常用写法:
async/await写法(Express项目首选)
在路由/业务处理函数前加async关键字,查询语句前加await等待结果返回。查单条文档优先用findOne,不需要额外加limit(1):
// 路由使用示例 app.get('/last-token', async (req, res) => { try { const lastDoc = await FM_Model.findOne().sort({ $natural: -1 }) console.log('Last Token from MONGODB here -> ', lastDoc) res.json(lastDoc) } catch (err) { res.status(500).json({ error: err.message }) } })
Promise链式调用写法
如果不想使用async语法,可以直接调用Query实例的then方法获取结果:
FM_Model.findOne().sort({ $natural: -1 }) .then(lastDoc => { console.log('Last Token from MONGODB here -> ', lastDoc) }) .catch(err => { console.error('查询出错:', err) })
补充排查点
- 如果坚持用
find().limit(1)的写法,加await后返回的是长度为1的文档数组,需要取第一个元素才是目标文档:const [lastDoc] = await FM_Model.find().limit(1).sort({ $natural: -1 }) - 若
$natural排序不符合预期,可以换成按_id倒序排序,效果完全一致:MongoDB默认生成的ObjectId自带插入时间戳,天然按写入顺序排序,写法为.sort({ _id: -1 }),兼容性更好。
内容的提问来源于stack exchange,提问作者mikeym
相关产品推荐
相关产品推荐

