source

몽구스:스키마 대 모델?

lovecheck 2023. 5. 22. 21:10
반응형

몽구스:스키마 대 모델?

자습서를 볼 때 특히 mongoose/mongodb를 다룰 때 스키마와 모델 사이에 설명이 있는 경우가 많습니다.이것은 postgresql로의 포팅을 다소 혼란스럽게 만듭니다. 왜냐하면 '모델'은 해당 시스템에 존재하지 않는 것처럼 보이기 때문입니다.두 가지 접근 방식의 차이점은 무엇입니까?

예를 들어, 이 줄에 해당하는 postgres/sql ORM은 무엇입니까?

(mongoose 및 express.js):

var userSchema = schema.define('local', {
    username:       String,
    password:       String,
});

module.exports = mongoose.model('User', userSchema);

mongoose에서 스키마는 문서의 전체 또는 일부인 특정 문서의 구조를 나타냅니다.이것은 기대되는 속성과 값, 제약 조건과 색인을 표현하는 방법입니다.모델은 데이터베이스와 상호 작용하기 위한 프로그래밍 인터페이스(읽기, 삽입, 업데이트 등)를 정의합니다.따라서 스키마는 "이 컬렉션의 데이터는 어떻게 표시됩니까?"라고 대답하고 모델은 "이 쿼리와 일치하는 레코드가 있습니까?" 또는 " 컬렉션에 새 문서 추가"와 같은 기능을 제공합니다.

straight RDBMS에서 스키마는 DDL 문(create table, alter table 등)에 의해 구현되는 반면 모델에 대한 직접적인 개념은 없으며, 기본 삽입, 업데이트, 삭제 작업뿐만 아니라 매우 유연한 쿼리(select statement)를 수행할 수 있는 SQL 문(SQL 문)만 있습니다.

SQL의 특성상 특정 필드만 선택하고 관련 테이블의 레코드를 함께 결합하여 각 쿼리에 대한 "모델"을 정의할 수 있습니다.

Ruby on Rails와 같은 다른 ORM 시스템에서 스키마는 ActiveRecord 메커니즘을 통해 정의되며 모델은 추가 비즈니스 로직을 정의하는 모델 하위 클래스가 추가하는 추가 방법입니다.

스키마는 기본적으로 (MongoDB 컬렉션에서) 문서의 데이터 구조를 설명합니다.이 스키마는 각 데이터 항목의 이름과 데이터 유형(문자열, 숫자, 날짜, 부울 등)을 정의합니다.

모델은 스키마의 컴파일된 버전입니다.모델의 인스턴스 하나가 데이터베이스의 문서 하나에 매핑됩니다.문서 읽기, 작성, 업데이트 및 삭제를 처리하는 모델입니다.Mongoose 컬렉션의 문서는 모델의 단일 인스턴스입니다.그래서 우리가 우리의 데이터로 작업을 한다면 그것은 모델을 통해 이루어질 것이라는 것이 말이 됩니다.모델의 단일 인스턴스(예: 의 사용자 인스턴스)var User = mongoose.model('User', userSchema);데이터베이스의 단일 문서에 직접 매핑됩니다.이 1:1 관계에서는 작성, 읽기, 저장 및 삭제와 같은 모든 문서 상호작용을 처리하는 모델입니다.이것은 모델을 매우 강력한 도구로 만듭니다.

Simon Holmes의 "응용 프로그램 개발을 위한 몽구스"에서 발췌, 2013.

저는 모델을 스키마에서 만들어진 클래스로 상상합니다(아마도 제가 잘못 생각한 것 같습니다).

MongoDB는 모든 것을 이진 형식인 BSON으로 저장합니다.으로 다음과 같이 수 : "Hello World BSON 문서는 다음과 같습니다.\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00컴퓨터는 그 모든 멈보 점보를 다룰 수 있지만, 그것은 인간에게 읽기 어렵습니다.우리는 우리가 쉽게 이해할 수 있는 것을 원하고, 이것이 개발자들이 데이터베이스 모델의 개념을 만든 이유입니다.모델은 선택한 프로그래밍 언어에서 데이터베이스 레코드를 좋은 개체로 표현한 것입니다.이 경우 모델은 JavaScript 객체가 됩니다.모델은 데이터베이스 값을 저장하는 단순 객체 역할을 할 수 있지만 종종 데이터 검증, 추가 방법 등을 포함합니다.보시다시피 몽구스는 그런 특징들을 많이 가지고 있습니다.

Evan Hahn의 "Express in Action"에서 발췌, 2016.

요약:

Mongoose 모델은 Mongoose 스키마의 래퍼입니다.Mongoose 스키마는 문서의 구조, 기본값, 유효성 검사기 등을 정의하는 반면, Mongoose 모델은 레코드 작성, 쿼리, 업데이트, 삭제 등을 위한 데이터베이스 인터페이스를 제공합니다.

참조: MongoDB용 Mongoose 소개 - FCC

Mongoose에서 스키마는 MongoDB 컬렉션에 있는 문서 또는 레코드의 구조를 정의합니다.필드, 필드 유형, 기본값 및 데이터에 적용할 유효성 검사 규칙을 정의합니다.

반면에 모델은 MongoDB 컬렉션을 나타내는 클래스입니다.스키마를 컴파일하여 만듭니다.MongoDB 컬렉션에서 문서를 쿼리, 삽입, 업데이트 및 삭제할 수 있는 인터페이스를 제공하여 보다 직관적인 방법으로 MongoDB 컬렉션과 상호 작용할 수 있습니다.

간단히 말해서, 스키마는 모델로 컴파일되며, 모델은 MongoDB 컬렉션에서 문서를 만들고, 읽고, 업데이트하고, 삭제하는 데 사용될 수 있습니다.

참고:

각각 다른 MongoDB 컬렉션을 나타내는 단일 스키마에서 여러 모델을 만들 수 있습니다.

스키마는 한 번 정의되고 반복적으로 사용되는 반면 모델은 여러 번 인스턴스화되어 컬렉션의 다른 문서로 작업할 수 있습니다.

다음 코드 확인:

import mongoose from "mongoose";

// Define a schema for a user document
const userSchema = new mongoose.Schema({
  firstName: {
    type: String,
    required: true
  },
  lastName: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  },
  age: {
    type: Number,
    required: false,
    default: null,
    min: 18
  }
});

// Create a model for the user collection based on the user schema
const User = mongoose.model('User', userSchema);

// Use the User model to create and save a new user document
const newUser = new User({
  firstName: 'John',
  lastName: 'Doe',
  email: 'johndoe@example.com',
  age: 25
});

newUser.save()
  .then(doc => console.log(doc))
  .catch(err => console.error(err));

언급URL : https://stackoverflow.com/questions/22950282/mongoose-schema-vs-model

반응형