카테고리 없음

[ mongoDB ] mongoose.model 와 mongoose.schema 의 차이

주영 🐱 2024. 5. 8. 18:38
728x90
반응형

최근 몽고디비로 작업해야해서 하다가 궁금한점 발견

mongoose.model 와 mongoose.model 의 정확한 차이는 무엇이고  어떻게 써야하는가?

Model

model은 'schema'의 wrapper이다

Schema

데이터의 구조와 타입을 정의하는 JSON 객체로 데이터베이스의 스키마와 같은 뜻

 

코드 예시 (model로 schema wrap한 모습)

export const Schemas: any = {
  Services: mongoose.model(
    "Services",
    new mongoose.Schema(
      {
        name: { type: String, unique: true },
        createdAt: Date,
        updatedAt: Date,
        deletedAt: Date,
      },
      { collection: "Services" }
    )

코드 설명 

이 코드는 Mongoose를 사용하여 MongoDB 데이터 모델을 정의하는 예시입니다. Mongoose는 MongoDB를 위한 Node.js 환경의 객체 모델링 도구(Object Data Modeling, ODM)입니다. 즉, MongoDB와의 상호작용을 쉽게 만들어주는 라이브러리입니다.

export const Schemas: any = {
  • 이 줄은 Schemas라는 이름의 객체를 내보내며, 이 객체는 애플리케이션에서 사용할 여러 Mongoose 스키마를 담게 됩니다. any 타입은 TypeScript 문법으로, Schemas 객체가 어떤 형태의 값도 가질 수 있음을 의미합니다.
Services: mongoose.model(
  • Services는 Schemas 객체 내에 정의된 속성 중 하나로, mongoose.model 메소드를 사용하여 Mongoose 모델을 생성합니다. 이 모델은 "Services"라는 이름의 MongoDB 컬렉션과 연결됩니다
"Services",
  • 첫 번째 인자는 모델의 이름을 나타냅니다. 이 이름은 MongoDB의 컬렉션 이름과 연결됩니다.
new mongoose.Schema(
  • 이 부분에서는 Mongoose 스키마를 정의합니다. 스키마는 MongoDB 컬렉션 내의 문서가 어떤 형태와 필드를 가질지 정의하는 객체입니다.
{
  name: { type: String, unique: true },
  createdAt: Date,
  updatedAt: Date,
  deletedAt: Date,
},
  • 스키마 정의 부분입니다. name 필드는 문자열 타입이며, unique: true로 설정되어 있어 중복 값을 허용하지 않습니다. createdAt, updatedAt, deletedAt 필드는 모두 날짜 타입으로, 문서가 생성, 업데이트, 삭제된 시간을 기록합니다.
 collection: "Services" }
  • 이 부분은 스키마에 대한 추가 옵션을 설정합니다. { collection: "Services" }는 이 모델이 사용할 MongoDB 컬렉션의 이름을 명시적으로 지정합니다. Mongoose는 모델 이름을 자동으로 복수형으로 변환하여 컬렉션 이름으로 사용하는데, 이 옵션을 통해 컬렉션 이름을 직접 지정할 수 있습니다. 예를 들어, 모델 이름이 "Service"라면 자동으로 "services" 컬렉션을 찾으려 시도하지만, 이 옵션을 통해 "Services" 컬렉션을 명시적으로 사용하도록 설정한 것입니다.

 

 

한줄로 정리하자면,

const User = mongoose.model("Services", Schemas, { collection: "Services" });

이런 구조가 되는 것이다

 

컬렉션이란? (=테이블)

mongodb는 컬렉션(Collection)을 사용해 데이터를 하나로 묶는다. 컬렉션이란 그저 용도가 같거나 유사한 문서들을 그룹으로 묶은 것을 말한다. 컬렉션은 기존 SQL 데이터베이스의 테이블처럼 동작한다.

반응형