Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[공유] nestJS mongoose 스키마 가상필드 및 메소드 사용 방법 #13

Open
vcho1958 opened this issue Dec 5, 2021 · 3 comments

Comments

@vcho1958
Copy link

vcho1958 commented Dec 5, 2021

👩‍💻 공유 사항

가상필드 혹은 getter, setter 선언 방법입니다.

@ModelOptions({autoIndex: true, toJSON: {virtuals: true}}) //모든 필드에 인덱싱, 반환할때 get있는 가상필드 포함
export class Customer extends Document {
  @Prop()
  public firstName: string;

  @Prop()
  public lastName: string;

  @Prop({unique: true})
  public email: string;

  @Prop()
  public phone: string;
  
  @Prop()
  public address: string;
  
  @Prop()
  public description: string;

  // this will create a virtual property called 'fullName'
  public get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }

  public set fullName(full:string) {
    const [firstName, lastName] = full.split(' ');
    this.firstName = firstName;
    this.lastName = lastName;
  }
}

메소드 선언 방법입니다.

@Schema()
export class Auth extends Document {
    ...
    
    validatePassword: Function;
}

export const AuthSchema = SchemaFactory.createForClass(Auth);

AuthSchema.methods.validatePassword = async function (password: string): Promise<boolean> {
    return bcrypt.compareAsync(password, this.password);
};

✅ 참고 사항

공유할 내용, 스크린샷 등을 넣어 주세요.

  • 추가적인 공유가 필요한 사항은 Comment
@JeongHyeongKim
Copy link

JeongHyeongKim commented Dec 6, 2021

후후 엄청 열심히 찾아보셨네요
조만간 제가 nest 기본 구조를 공유드릴 예정입니다ㅎㅎ

제가 올린 코드와 현창님 올린 코드랑 어느게 나은지 이야기 해보면 좋을거같아유

@JeongHyeongKim
Copy link

일단 위 코드에 대해 질문 및 리뷰를 드립니다.

  1. 모든 field에 indexing을 하셨는데, 의도된 것인가요? 아니면 테스트인가요?
  2. 기본적으로 mongoose를 이용하였을 때, _id field를 unique index로 사용합니다. 특별히 email을 unique index로 사용하신 이유가 있으신지 궁금합니다!

시험공부 하시느라 고생 많으실텐데 편하실때 답변 주시면 감사합니다 :)

@vcho1958
Copy link
Author

vcho1958 commented Dec 6, 2021

@JeongHyeongKim

  1. 예제 복사해온 거긴 하지만 운영보조원할 때 안광모교수님 mongoDB구조도 그렇고 where절에 자주 쓰이는 부분(nestjs구조로 따지자면 레포지터리에 메소드를 할당할 정도의 고착화된 쿼리에 사용되는 필드)은 인덱싱을 해두시더라구요. 주소는 인덱싱보단 정규식으로 검색하는 스태틱메소드 만들어서 활용하는 게 맞는 것 같긴한데 그렇게까지 수정할 필요는 없는 것 같아서 코드의 의미만 주석으로 달았습니다.

  2. 저 unique는 중복을 체크한다는 걸로 알고 있어요. 안광모 교수님께서도 중복검사가 필요한 부분은 unique:true로 하시긴하셨는데 unique가 RDB의 primary key처럼 index도 포함한다는 의미인줄은 몰랐습니다.
    그리고 _id필드는 무조건 생성돼서 생략하는 것 같더라구요 nestjs 공식문서에서도 그렇구용.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants