본문 바로가기
Runtime/Node.js

19. MongoDB(스키마, 모델 생성)

by 김엉배 2023. 4. 14.
728x90
반응형

 

1. 스키마와 모델

  • 스키마는 MongoDB 컬렉션에 들어가는 문서 내부의 각 필드가 어떤 형식으로 되어 있는지 정의하는 객체
  • 모델은 MongoDB의 데이터에 대한 조회, 생성, 수정, 삭제와 같은 처리를 할 수 있는 다양한 함수 내장

 

2.  스키마 정의

  • 옵션
    - type : 데이터 타입
    - required : 필수 값 여부
    - unique : 유일한 값인지 여부
    - default : 데이터가 없을 경우 기본 값(ex: Date.now()

 

  • MongoDB 설치 후, customers라는 컬렉션 생성, 다음과 같은 Document를 추가
{
	"name"   : "Lee",
	"email"  : "Lee123@naver.com",
	"phone:  : "010-1234-1234",
	"addres" : "123-2"
}

 

  • Document 정의
필드명 type required unique default
name String true    
email String true true  
phone String true true  
address String      

 - String : 문자열

 - Number : 숫자

 - Date : 날짜

 - Buffer : 파일을 담을 수 있는 버퍼

 - Boolean : 참(true)과 거짓(false)

 - Mixde(Schema, Types, Mixed) : 어떤 데이터도 넣을 수 있는 형식

 - Array : 배열

 - ObjectId(Schema, Types, ObjectId) : 객체 아이디, 다른 객체(문서)에 대한 참조

 

  • mongoose 폴더에 schemas 폴더를 만들고, customer.js 파일 생성 후 코드 작성

- mongoose 모델은 mongoose.model() 함수를 사용해 생성

- mongoose.model() 함수는 두 개의 파라미터를 가지고 있는데 첫 번째는 스키마 이름이고, 두 번째는 스키마 객체이다.

 

 

3.  문서 검색

  • app_mongodb.js 파일을 만들고 express로 웹 서버 생성

find() 함수로 데이터를 조회

  • app_mongodb.js 실행
node app_mongodb.js

 

  • localhost:3001/customers로 접속하면 콘솔에 customers 컬렉션에 저장된 Document 조회 결과를 출력한다.

 

 

4.  문서 추가

  • 문서 추가할 때는 모델의 create() 함수를 사용해 추가
// 새로운 문서를 하나 추가할 때
const r = awit Customer.create({
	name: "Customer1",
    email: "customer1@naver.com",
    phone: "010-1111-1111",
    address: "",
});

console.log(r);

// 두 개 이상의 문서를 한 번에 추가할 때
awit Customer.create([
	{
    	name: "Customer2",
    	email: "customer2@naver.com",
    	phone: "010-2222-2222",
    	address: "",
    },
    {
    	name: "Customer3",
    	email: "customer3@naver.com",
    	phone: "010-3333-3333",
    	address: "",
    },
]);

 

5.  문서 수정

  • Model.findByIdAndUpdate()
    - 문서의 _id 값으로 조회된 결과에 해당하는 문서를 수정한다.
awit Customer.findByIdAndUpdate(id, {phone:'010-1234-5678'});

// id: 문서의 _id 값
// update: 수정할 필드, 자바스크립트 Objec(ex: {phone:'010-1233-3333'})
// [options]: new, lean, session, strict, timestamp, returnOriginal, overwrite 등
// [callback]: 콜백 함수로 결과 전달

 

  • Model.updateMany()
    - 조회된 모든 문서를 수정
awit Customer.updateMany({name: /Kim/}, {phone: '010-3333-3333'});

// [conditions]: 조회 조건, 자바스크립트 Object
// [update]: 수정할 필드, 자바스크립트 object(ex: {phone: '010-3333-3333'})
// [options]: strict, upsert, writeConern, timestamps 등  
// [callback]: 콜백 함수로 결과 전달

 

  • Model.updateOne()
    - 조회된 결과 중 첫 번째 문서를 수정
awit Customer.updateOne({name: /Kim/}, {phone: '010-3333-3333'});

// [conditions]: 조회 조건, 자바스크립트 Object
// [update]: 수정할 필드, 자바스크립트 object(ex: {phone: '010-3333-3333'})
// [options]: strict, upsert, writeConern, timestamps 등  
// [callback]: 콜백 함수로 결과 전달

 

6.  문서 삭제

  • Model.deleteMany()
    - 조건에 해당하는 모든 문서를 삭제
awit Customer.deleteMany({name: /Lee/ }); // name에 'Lee'가 포함된 모든 문서 삭제

// [conditions]: 조회 조건, 자바스크립트 Object
// [options]: strit, session 등 옵션
// [callback]: 콜백 함수로 결과 전달

 

  • Model.deleteOne()
    - 조회된 결과 중 첫 번째 문서를 삭저
awit Customer.deleteOne({name: /Lee/ }); // name에 'Lee'가 포함된 문서 중 첫번째 삭제

// [conditions]: 조회 조건, 자바스크립트 Object
// [options]: strit, session 등 옵션
// [callback]: 콜백 함수로 결과 전달
728x90
반응형

'Runtime > Node.js' 카테고리의 다른 글

21. 메일링 서비스(Nodemailer)  (7) 2023.04.18
20. 로그 관리  (2) 2023.04.18
18. MongoDB(mongoose 모듈)  (5) 2023.04.10
17. MongoDB(툴 설치 및 준비)  (3) 2023.04.10
16. MongoDB (Mac 설치)  (1) 2023.03.12