【已解决】mongoose在mongodb中添加数据,数据库默认复数问题
Nodejs mongoose在mongodb中添加数据,数据库默认复数问题
- 问题描述
- studentModel文件
- baseModel文件
- 解决方法
- 其他
问题描述
在ts项目内使用mangoose接入mangodb,向一个已有数据的表里添加数据。运行时总是自动创建一个新的表,并命名为复数。
已有的表假设命名是 ‘student (手动去敏)studentmodel继承基类basemodel,在constructor中super(‘student’),并调用基类中的数据插入方法。
studentModel文件
定义数据存储的key和传递参数数据校验类型
- 创建model:
export interface StudentRecord {Age: string;Name: string;
}
- 创建schema
const studentSchema = new mongoose.Schema({Age: String,Name: String
});
- 建立class
expert class StudentModel extends BaseModel{private Student:mongoose.Model<any>;constructor(colName:string){super('student');.... }
....async insertData(data:StudentRecord ):promise<any>{try{const res = await this.insertOne(data);return result;}....}
....
}
baseModel文件
- 创建模型基类BaseModel,定义插入数据的函数
export class BaseModel{protected model:mongoose.Model<any>;....constructor(colName:string){this.model = mongoose.models[colName]||mongoose.model(colName,baseSchema);.... }....// 数据创建函数protect async insertOne(data: any): Promise<any> {try {return this.model.create(data);} ....}....
}
解决方法
把studentModel中插入数据的代码
const res = await this.insertOne(data);
换成
const res= await this.Student.insertOne(metadata);
原本是调用基类中的model.create,修改后调用子类Model的方法。
修改前会自动创建students表并插入数据,并且新建key ‘__v’。修改后数据放入student表中,但仍然会创建students表,新建表内无数据无key。
其他
虽然数据放置位置没问题,但如何让新的复数表不再生成。