如何解决Node.js应用中的BSONVersionError(需使用BSON 5.x.x)
我的Node.js应用中出现了BSONVersionError,错误提示为“Unsupported BSON version, bson types must be from bson 5.x.x”,我认为这与MongoDB Node.js驱动或其他使用BSON的库有关。
详细信息
- 已检查依赖,当前使用的MongoDB Node.js驱动版本为[你的版本]。
- 已尝试通过
npm install mongodb@5.x.x将MongoDB Node.js驱动更新至5.x.x版本。 - 应用对接的MongoDB服务器版本为5.9.2
代码片段
dbClientObj.collection(CollectionName).findOne({_id: new ObjectId(employeeId)})
(注:原代码存在语法错误,已修正多余的_id:)
错误堆栈跟踪
BSONVersionError: Unsupported BSON version, bson types must be from bson 5.x.x
at serializeInto (D:\beyond-carts\PhoenixMind\SubscriptionService\node_modules\mongodb\node_modules\bson\lib\bson.cjs:3670:23)
at ...(原堆栈缺失部分保留)
at Msg.toBin (D:\beyond-carts\PhoenixMind\SubscriptionService\node_modules\mongodb\lib\cmap\commands.js:366:29)
at MessageStream.writeCommand (D:\beyond-carts\PhoenixMind\SubscriptionService\node_modules\mongodb\lib\cmap\message_stream.js:43:34)
at write (D:\beyond-carts\PhoenixMind\SubscriptionService\node_modules\mongodb\lib\cmap\connection.js:479:30)
at Connection.command (D:\beyond-carts\PhoenixMind\SubscriptionService\node_modules\mongodb\lib\cmap\connection.js:312:13)
环境信息
- Node.js版本:18
- MongoDB服务器版本:5.9.2
已尝试方案
尝试过直接使用bson包,例如new BSON.ObjectId(<employee_id>)
问题
如何解决BSONVersionError并确保我的应用使用5.x.x版本的BSON类型?
1. 统一BSON依赖版本
错误核心是项目中存在多版本BSON库,或手动引入的bson包与MongoDB驱动内置BSON版本不匹配。
- 删除
node_modules和锁文件:
rm -rf node_modules package-lock.json
- 重新安装指定版本的MongoDB驱动:
npm install mongodb@5.x.x
- 不要单独安装
bson包,直接用MongoDB驱动内置的BSON类型,保证版本完全一致。
2. 正确引入ObjectId
从MongoDB驱动中导出ObjectId,而非单独的bson包:
// CommonJS写法 const { MongoClient, ObjectId } = require('mongodb'); // ES模块写法 import { MongoClient, ObjectId } from 'mongodb'; // 使用示例 dbClientObj.collection(CollectionName).findOne({ _id: new ObjectId(employeeId) });
3. 排查依赖冲突
用命令查看项目中所有BSON版本:
npm ls bson
若发现其他依赖引入了不同版本的BSON,可在package.json中添加resolutions强制统一版本(npm 8+支持):
{ "resolutions": { "bson": "^5.9.2" } }
添加后重新执行npm install。
4. 验证版本一致性
安装完成后,打印驱动内置BSON版本确认:
const { BSON } = require('mongodb'); console.log('BSON版本:', BSON.version);
输出应为5.x.x系列版本,比如5.9.2。
内容的提问来源于stack exchange,提问作者karthik Rao

