MongoDB版本更新后mongo导入不存在 无法调用ObjectId查询单条文档咨询
MongoDB版本更新后ObjectId导入报错解决方案
报错原因
mongodb包v4及以上版本调整了ESM规范下的导出结构,不再支持默认导入整个mongo对象的写法,因此默认导入的变量为undefined,调用mongo.ObjectId就会抛出属性读取错误。
方案1:直接按需导入ObjectId(推荐)
修改导入语句,单独导入需要用到的ObjectId方法:
// 替换原有默认导入写法 import { ObjectId } from 'mongodb';
对应业务代码部分直接调用导入的ObjectId即可,修改后完整代码如下:
import { ObjectId } from 'mongodb'; app.get ('/products/:id', async (req , res) => { let id = req.params.id; let db = await connect(); console.log("params: ",id); let doc = await db.collection("posts").findOne({_id: ObjectId(id)}); console.log(doc) res.json(doc) });
方案2:保留原有调用逻辑,调整为命名空间导入
如果不想修改原有业务代码里的mongo.ObjectId写法,可以把导入语句改为命名空间导入形式:
import * as mongo from 'mongodb';
原有业务逻辑不需要做任何改动即可正常运行。
补充注意事项
- 如果使用CommonJS规范的
require导入,同样需要调整写法:const { ObjectId } = require('mongodb'); - 建议额外添加ID格式校验逻辑,避免非法ID转换时抛出异常:
if (!ObjectId.isValid(id)) { return res.status(400).json({error: '无效的ID格式'}); }
内容的提问来源于stack exchange,提问作者Jan Tuđan
相关产品推荐
相关产品推荐

