【已解决】mongoose在mongodb中添加数据,数据库默认复数问题

Nodejs mongoose在mongodb中添加数据,数据库默认复数问题

问题描述

在ts项目内使用mangoose接入mangodb,向一个已有数据的表里添加数据。运行时总是自动创建一个新的表,并命名为复数。

已有的表假设命名是 'student (手动去敏)studentmodel继承基类basemodel,在constructor中super('student'),并调用基类中的数据插入方法。

studentModel文件

定义数据存储的key和传递参数数据校验类型

  • 创建model:
javascript 复制代码
export interface StudentRecord {
    Age: string;
    Name: string;
}
  • 创建schema
javascript 复制代码
const studentSchema = new mongoose.Schema({
    Age: String,
    Name: String
});
  • 建立class
javascript 复制代码
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,定义插入数据的函数
javascript 复制代码
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中插入数据的代码

javascript 复制代码
const res = await this.insertOne(data);

换成

javascript 复制代码
const res= await this.Student.insertOne(metadata);

原本是调用基类中的model.create,修改后调用子类Model的方法。

修改前会自动创建students表并插入数据,并且新建key '__v'。修改后数据放入student表中,但仍然会创建students表,新建表内无数据无key。

其他

虽然数据放置位置没问题,但如何让新的复数表不再生成。

相关推荐
计算机毕设VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue医院设备管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
Mr__Miss10 小时前
保持redis和数据库一致性(双写一致性)
数据库·redis·spring
Knight_AL11 小时前
Spring 事务传播行为 + 事务失效原因 + 传播行为为什么不用其他模式
数据库·sql·spring
倔强的石头_11 小时前
时序数据时代的“存储与分析困局”解析及金仓解决方案
数据库
计算机毕设VX:Fegn089511 小时前
计算机毕业设计|基于springboot + vue小型房屋租赁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
倔强的石头_12 小时前
场景化落地指南——金仓时序数据库在关键行业的应用实践
数据库
SelectDB13 小时前
驾驭 CPU 与编译器:Apache Doris 实现极致性能的底层逻辑
运维·数据库·apache
zbguolei13 小时前
MySQL根据身份证号码计算出生日期和年龄
数据库·mysql
马克学长14 小时前
SSM校园图书借阅服务系统jd2z8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·图书管理系统·ssm 框架·ssm 校园图书借阅系统
软件派14 小时前
高斯数据库使用心得——从性能优化到行业实践的深度解析
数据库·oracle