NestJS에서 Mongoose를 사용하는 MongoDB의 복합/복합 키

Nest-JS에서 Mongoose를 사용하는 MongoDB의 복합/복합 키





그래서 최근에 저는 Mongo DB와 몽구스로 NestJS를 탐색하고 있습니다. 새로운 프레임워크이기 때문에 온라인에서 도움을 찾는 것이 상당히 어려웠습니다. 그래서 여기에서 나는 당신의 삶을 쉽게 만들기 위해 내가 할 수 있는 한 많은 도움을 제공할 것입니다.

Disclaimer: The GitHub repo I provide was using multiple databases even though in example I used single database_, that's why you will see the_ Mongoose.Module.forFeature({}) for user and hobby modules in app.module file however both these mongoose module are using one database i.e. ‘db1’_ . Don’t get bothered, you can use single database and the code will run just fine._



그래서 오늘은 NestJS에서 몽구스를 사용하여 일대다 관계로 복합/복합 키 생성에 대해 다룰 것입니다. 또한 다양한 사례 시나리오에서 스키마 파일에서 수행해야 하는 변경 사항을 보여줍니다. 이 예제에서 사용할 전체 코드 베이스를 제공하지만 다음을 이해하는 데 도움이 될 것입니다.
  • 간단한 NestJS 앱을 만드는 방법입니다.
  • mongoose를 사용하여 NestJS에서 스키마를 생성하는 방법입니다.
  • NestJS에서 모듈을 만드는 방법
  • 참조된 관계 및 포함된 관계는 무엇입니까?
  • NestJS에서 API를 작성하는 방법

  • 또한 복합 키를 생성하려면 스키마 파일만 수정하면 되고 원하는 대로 비즈니스 로직에 따라 리포지토리, 서비스 및 컨트롤러 파일을 사용하여 API를 작성하기 때문에 내 스키마 파일의 코드만 언급하겠습니다.

    먼저 다음 명령을 사용하여 NestJS 애플리케이션을 만듭니다.

    nest new application_name



    이것은 작업할 간단한 상용구 코드를 제공합니다. 이제 모듈을 생성합니다. 이 예제에서는 간단한 사용자 모듈을 사용하겠습니다. 다음 명령을 사용할 수 있습니다.

    nest g module module_name



    이제 스키마를 생성해 보겠습니다. NestJS에서 우리는 애플리케이션 전체에서 데코레이터를 사용하며 무섭게 보이지만 우리 삶을 너무 쉽게 만듭니다. 내 사용자 스키마에 대한 코드는 다음과 같습니다.

    _export type UserDocument = User & Document;_
    
    _@Schema({_
    
    _})_
    
    _export class User {_
    
    _@Prop()_
    
    _email: string;_
    
    _@Prop()_
    
    _age: number;_
    
    _// @Prop({type: Types.ObjectId, ref: () => Address, refPath: ‘db2’})_
    
    _// address: Address_
    
    _@Prop()_
    
    _hobby: Hobby[]_
    
    _}_
    


    export const UserSchema = SchemaFactory.createForClass(사용자);

    UserSchema.index({email: 1, 취미: 1}, {unique: true})

    이제 여기에 취미와 같은 다른 스키마 개체의 포함된 개체로 스키마를 정의했습니다. NestJS에서는 노드와 마찬가지로 몽구스를 사용하는 동안 인덱스 함수에서 엔터티 이름을 전달하여 복합 키에 대한 스키마를 알려야 합니다. 이름 앞의 숫자는 정렬 순서를 나타냅니다. 마지막 줄에 고유한 플래그를 추가하여 이 키에 고유한 제약 조건을 할당합니다. 즉, 이 키 조합이 반복되면 데이터베이스 오류 때문입니다.

    여기서는 포함된 객체 배열로 복합 키를 생성하여 더 복잡하게 만들었습니다. 다양한 시나리오에서 복합 키를 생성하기 위해 수행해야 하는 변경 사항에 대해 언급하겠습니다.


  • 참조 개체:

  • 측면 Prop() 데코레이터에서 소품 유형을 Types.ObjectId로 추가하고 이름을 문자열로 전달하여 소품의 참조 스키마를 정의합니다. 업데이트된 줄은 다음과 같습니다.

    @Prop({유형: Types.ObjectId, ref: '취미'})

    취미: 취미[]

    이제 삽입하기 전에 데이터베이스는 배열에 있는 ObjectID가 있는 전자 메일의 조합을 확인하고 가능한 쌍이 반복되면 오류가 발생합니다.
  • 관계 없음:

  • 동일한 스키마의 엔터티를 사용하여 복합 키를 생성하려면 이 경우 이메일과 연령을 사용하여 복합 키를 만들 수 있습니다. UserSchema.index 함수 내부의 정보만 변경하면 됩니다. 업데이트된 줄은 다음과 같습니다.

    UserSchema.index({email: 1, age: 1}, {unique: true})

    이제 삽입하기 전에 데이터베이스는 이메일과 나이의 조합을 확인하고 쌍이 반복되면 오류가 발생합니다.

    지금은 매우 명백하지만 여전히 언급할 가치가 있다고 생각합니다.

    3개 이상의 엔터티를 결합하여 복합 키를 생성할 수 있습니다. Schema.Index({ },{unique: true}) 함수에서 복합 키에 포함하려는 엔터티에 대해 스키마에 알리기만 하면 됩니다.

    이 기사의 전부입니다. 답을 찾을 수 있기를 바라며 이곳에 오는 모든 개발자에게 유용한 정보가 되었으면 합니다.

    작동하는 코드 베이스에 대한 링크는 다음과 같습니다.

    GitHub - haadbaig/NestJS

    NestJS의 다른 주제에 대한 기사를 작성하려면 Medium/Twitter/LinkedIn에서 저에게 연락하십시오.

    좋은 웹페이지 즐겨찾기