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

Mongoose 7.2.2保存数据报错:Cannot read properties of undefined (reading 'options')

问题:Mongoose 7.2.2 保存数据时报错 "Cannot read properties of undefined (reading 'options')"

相关代码与数据

Schema 定义

// database schema 
const schema = Schema({
  "name": { type: String },
  "description": { type: String },
  "database": { 
    type: { type: String },
    url: { type: String },
    db: { type: String },
    username: { type: String },
    password: { type: String },
  },
  "schema": [ { type: Schema.Types.Mixed } ],
}, {
  timestamps: true, 
  virtuals: true,
  toJSON: {
    transform: (docs, ret) => {
      const obj = ret;
      obj.id = obj._id;
      delete obj.__v;
      return obj;
    }
  }
});
mongoose.model('data_assets', dataAssetsSchema);

保存数据代码

// save the data
const collection = mongoose.model('data_assets');
return await collection.create(data);

待保存数据示例

{
  schema: [
    {
      name: 'name',
      column: 'name',
      role: 'dimension',
      type: 'string'
    },
    { name: 'latitude', column: 'latitude', role: 'measure', type: 'float' },
    {
      name: 'longtitude',
      column: 'longtitude',
      role: 'measure',
      type: 'float'
    }
  ],
  name: 'china_train_station',
  database: {
    url: 'mongodb://localhost:27017',
    username: '',
    password: '',
    db: 'test',
    collection: 'station',
    indexing: 'name'
  }
}

报错信息

err TypeError: Cannot read properties of undefined (reading 'options')
    at getEmbeddedDiscriminatorPath (/Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/helpers/document/getEmbeddedDiscriminatorPath.js:25:79)
    at model.$set (/Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/document.js:1149:16)
    at model.$set (/Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/document.js:1208:14)
    at model.$set (/Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/document.js:1100:14)
    at model.Document (/Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/document.js:165:12)
    at model.Model (/Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/model.js:122:12)
    at new model (/Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/model.js:4609:15)
    at /Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/model.js:2853:16)
    at Array.map (<anonymous>)
    at Function.create (/Users/Documents/code/data/server2/node_modules/_mongoose@7.2.2@mongoose/lib/model.js:2842:38)

解决方法

报错根源是Schema定义和Model创建环节存在两个关键问题:

  1. 变量名不匹配:定义的Schema变量是schema,但调用mongoose.model时传入的是未定义的dataAssetsSchema,导致Model未被正确创建。
  2. 数组类型定义错误:"schema": [ { type: Schema.Types.Mixed } ]的写法不符合Mongoose规范,Mixed类型数组应直接写[Schema.Types.Mixed],不需要额外包裹对象。

修正后的Schema代码:

const dataAssetsSchema = Schema({
  name: { type: String },
  description: { type: String },
  database: { 
    type: { type: String },
    url: { type: String },
    db: { type: String },
    username: { type: String },
    password: { type: String },
  },
  schema: [Schema.Types.Mixed], // 修正数组类型定义
}, {
  timestamps: true, 
  virtuals: true,
  toJSON: {
    transform: (docs, ret) => {
      const obj = ret;
      obj.id = obj._id;
      delete obj.__v;
      return obj;
    }
  }
});
mongoose.model('data_assets', dataAssetsSchema); // 变量名匹配

同时需确保调用collection.create(data)前,Mongoose已成功连接到数据库,且Model已被正确初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:23:13