Node.js按_id查询MongoDB时ObjectId未定义及空Promise问题求解
解决方法
1. 修复ObjectId is not defined报错
ObjectId是MongoDB专属的ID类型工具,需要从对应的依赖包提前导入才能使用:
- 若使用官方
mongodb驱动:
在代码顶部加入导入语句:
const { ObjectId } = require('mongodb');
- 若使用
mongoose框架:
导入语句为:
const { ObjectId } = require('mongoose').Types;
注意:传入ObjectId构造函数的参数必须是符合24位十六进制规则的ID字符串,否则会抛出格式校验错误。
2. 修复异步逻辑,正常获取查询结果
你的代码同时混用了await和.then两种异步处理语法,导致逻辑混乱,同时你拿到Promise { }是因为没有等待异步执行完成就读取了返回值。推荐统一使用async/await语法处理查询逻辑,示例代码如下:
// 注意:该代码块需要放在async函数内部才能正常执行 const client = await MongoClient.connect('你的MongoDB连接地址'); let Obj; try { Obj = await client .db("Database") .collection("Collection") .findOne({ _id: ObjectId(Filter) }); // 此处可以直接使用查询到的Obj变量 console.log(Obj); } finally { await client.close(); }
如果需要在全局作用域获取查询结果,需要调用异步函数后通过.then接收结果,或者将顶层代码标记为ESM模块使用顶层await。
内容的提问来源于stack exchange,提问作者ASN
相关产品推荐
相关产品推荐

