You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Mongoose加载JSON时自动解析$oid为ObjectId?

解决Mongoose解析$oid格式ObjectId的问题

下面提供几种实用方案,帮你把JSON里的$oid格式转换成Mongoose可识别的ObjectId类型:

方法一:手动递归转换所有$oid字段

写一个递归函数遍历JSON数据,自动把带$oid属性的对象转为ObjectId:

const mongoose = require('mongoose');

function convertOidFields(obj) {
  if (typeof obj !== 'object' || obj === null) return obj;
  
  // 匹配$oid格式的对象
  if (obj.$oid && typeof obj.$oid === 'string') {
    return mongoose.Types.ObjectId(obj.$oid);
  }
  
  // 递归处理数组元素
  if (Array.isArray(obj)) {
    return obj.map(item => convertOidFields(item));
  }
  
  // 递归处理嵌套对象的每个字段
  for (const key in obj) {
    obj[key] = convertOidFields(obj[key]);
  }
  return obj;
}

// 使用示例
const testData = require('./your-test-data.json');
const processedData = convertOidFields(testData);
const doc = new MyModel(processedData);
// 此时doc._id及其他带$oid的字段均为ObjectId类型

方法二:利用bson库自动解析

MongoDB的bson库(Mongoose已内置依赖)可直接处理这种Extended JSON格式,通过序列化再反序列化自动转换特殊格式:

const { BSON } = require('bson');
const mongoose = require('mongoose');

const jsonData = require('./your-test-data.json');
// 先转BSON再转回JS对象,自动处理$oid、$date等MongoDB特殊格式
const parsedData = BSON.deserialize(BSON.serialize(jsonData));
const doc = new MyModel(parsedData);

方法三:给Schema字段添加自定义setter

如果仅需处理特定字段,可在Schema对应字段上设置setter函数,自动转换传入的$oid格式:

const mySchema = new mongoose.Schema({
  _id: {
    type: mongoose.Schema.Types.ObjectId,
    set: (value) => {
      if (value?.$oid) {
        return mongoose.Types.ObjectId(value.$oid);
      }
      return value;
    }
  },
  // 其他需要处理$oid的字段可添加相同逻辑
  relatedDocId: {
    type: mongoose.Schema.Types.ObjectId,
    set: (value) => {
      if (value?.$oid) {
        return mongoose.Types.ObjectId(value.$oid);
      }
      return value;
    }
  }
});

const MyModel = mongoose.model('MyModel', mySchema);

// 直接传入带$oid的对象即可自动转换
const doc = new MyModel({
  "_id": {"$oid": "6457a66965cfa04f2c2bf00f"},
  "relatedDocId": {"$oid": "6457a66965cfa04f2c2bf010"}
});

内容的提问来源于stack exchange,提问作者Stichiboi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:50:14