如何处理MongoDB返回的带$numberInt等标识的EJSON格式数据
MongoDB Realm返回带$类型标识EJSON的转换方案及格式原因
带$前缀数字类型标识的原因
你从MongoDB Realm查询返回的内容是MongoDB扩展JSON(简称EJSON)格式,不是普通JSON。
MongoDB原生支持32位整数、64位整数、双精度浮点数等多种精细化数值类型,但标准JSON只有统一的number类型,无法区分这些类型差异,会存在精度丢失的风险。因此MongoDB的序列化接口会用$numberInt、$numberDouble这类带$前缀的类型字段包裹数值,保留原始数据的类型信息,这是序列化输出的格式,不是数据在数据库中实际存储的结构。
无固定字段场景下的转换方案
你提到的方案是经过验证的可行方案,无需预先定义Schema就能适配字段不统一的场景,具体操作如下:
- 首先安装依赖包:
npm install mongodb-extjson - 在代码中导入EJSON模块
- 遍历返回的文档数组,对每个文档先执行
JSON.stringify序列化,再调用EJSON.parse并传入{strict: false}参数即可完成转换
示例代码:
restaurants.map((restaurant) => { restaurant = EJSON.parse(JSON.stringify(restaurant), {strict: false}); // 后续可直接使用转换后的普通JSON对象 })
注意{strict: false}参数为必填项,该配置允许解析器识别MongoDB专属的类型标识字段,自动将其转换为原生JS的数值类型,无需提前配置字段规则。
内容的提问来源于stack exchange,提问作者Omniwot
相关产品推荐
相关产品推荐

