staopwatch와 관련한 기본 기능은 다 만들어진 상태. start버튼과 stop버튼을 누르면 각 과목 대해서 시간이 mongoDB에 잘 저장되고 있다.
그런데 문제가 있음. 랭킹에 보여주려면 각 과목의 timer를 매번 더해서 쿼리를 짜야하는데 매번 요청을 날릴 때 마다 이렇게 하기에는 무리가 있을 듯함.
그리고 1시간마다 시간을 저장하기로 했는데 각 과목의 타이머만 저장해놓으면 다시 또 다 더하는 코드를 짜야함… 그냥 저장할 떄 total_time 필드를 만들면 좋지 않을까 하는 생각에 만들어 봄
total_time field 추가 전의 timer스키마
const timerSchema = new Schema({
user_id: { type: Schema.Types.ObjectId, ref: 'User' },
daily: {
date: String, // 오늘 날짜
data: [
{
title: { type: String }, // 과목
timer: { type: Number }, // 초 단위로 공부한 시간
},
],
},
});
그래서 total_time field를 추가해서 뭘 할거냐면,,,
db에서 user를 찾고 해당 사용자의 daily filed에서 과목을 찾아서 업데이트하고, total_time을 업데이트해서 저장할거다!
const timerSchema = new Schema({
user_id: { type: Schema.Types.ObjectId, ref: 'User' },
daily: {
date: String, // 오늘 날짜
total_time: { type: Number, default: 0 }, // 총 공부 시간
data: [
{
title: { type: String }, // 과목
timer: { type: Number }, // 초 단위로 공부한 시간
},
],
},
});
total_time
필드를 즉시 사용할 수 있습니다.total_time
**을 업데이트할 때 일일 데이터를 반복하여 모두 더해야 합니다.total_time
필드를 사용하기 어려울 수 있습니다.const timerSchema = new Schema({
user_id: { type: Schema.Types.ObjectId, ref: 'User' },
total_time: { type: Number, default: 0 }, // 총 공부 시간
daily: {
date: String, // 오늘 날짜
data: [
{
title: { type: String }, // 과목
timer: { type: Number }, // 초 단위로 공부한 시간
},
],
},
});
total_time
필드는 전체 총 공부 시간을 쉽게 추적할 수 있습니다.