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创建环节存在两个关键问题:
- 变量名不匹配:定义的Schema变量是
schema,但调用mongoose.model时传入的是未定义的dataAssetsSchema,导致Model未被正确创建。 - 数组类型定义错误:
"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
相关产品推荐
相关产品推荐

