【发布时间】:2021-07-08 13:17:03
【问题描述】:
我在一个使用 typeorm 的项目中工作。 在我的项目中,我有这些实体: 课程.ts
export class Course extends DefaultBaseEntity {
@Column({name: "course_name"})
courseName: string;
@Column({name:"discipline"})
discipline: string;
@Column({default: 0}) rating: number;
}
和 RatingsCourse.ts
export class CoursesRatings extends BaseEntity {
@PrimaryGeneratedColumn({type: "bigint"})
public id: number;
// other columns defined here
@Column({type: "bigint"})
userId: number;
@Column({type: 'bigint'}) courseId: number;
@Column() rating: number;
}
每门课程都有评分的想法。当我添加新评分时,我想将 CoursesRatings 中的平均评分值保存在 Course 的评分字段中 我编写了这样的代码:
await CoursesRatings.create({
courseId: ratingBody.courseId,
userId: user.id,
rating: ratingBody.rating
}).save();
const ratingsObjects = await CoursesRatings.find({
where: {
courseId: ratingBody.courseId,
userId: user.id
},
select: ["rating"]
});
const ratings: number[] = ratingsObjects.map(x => x.rating);
const avgRating = ratings.reduce((a, b) => a + b) / ratings.length;
const course = await Course.findOne(ratingBody.courseId);
course.rating = Math.fround(avgRating);
await course.save();
但这需要一些时间。 我想知道如何优化这段代码。我很感激任何帮助。谢谢!
【问题讨论】:
-
在
CoursesRatings的插入上写一个数据库触发器怎么样? -
怎么做db触发器?你能给我看一些代码吗? @SohamLawar
标签: mysql node.js typescript typeorm