[Mongo] Mongoose 메모

김택주·2023년 2월 2일

Mongo DB

목록 보기
5/9

출처:
https://lakelouise.tistory.com/214

Mongoose ODM


Object Data Model
몽고DB의 Collection을 모델화 시켜주며
다양한 기능을 제공하여 관리하기 편하게 해줌

Mongoose 쓰는이유


  1. nodejs 에서 제공해주는 기본 몽고DB 연결 상태 관리가 좋지않아
    Mongoose 을 사용하면 손쉽게 연결상태를 관리 할수있다

  2. 몽고DB가 NoSQL 언어라서 스키마가 없는게 개발 시 불편할수 있는데
    Mongoose 에서 코드레벨에서 스키마를 제공하여 용이함

  3. 몽고DB에서는 기본적으로 조인을 제공하지않아 aggregate라는 방식으로
    어렵게 조인을 해야하는데 Mongoose 에서 제공해주는 populate를 사용하면 손쉽게 가능

Mongoose 사용 과정


  1. 스키마 생성
	new Schema({
    	test: String
    })

RDMS와 비유하면 테이블을 미리 생성해두는 거라 생각하면 될듯
데이터 들어올때 속성 타입을 확인하여 맞지 않는 타입의 데이터가 들어올 경우 에러를 발생시킴

  1. 모델 생성
	mongoose.model('test', new Schema({
    	test: String
    }))

model 함수를 사용하여 손쉽게 연결 가능

  1. 데이터 베이스 연결
	mongoose.connect('mongoDB://127.0.0.1/mongo');

connect 함수로 연결
mongoose 는 자동으로 연결을 관리하기 때문에
추후에 model 관련 작업 시 연결 확인을 하지않아도 자동으로 연결 확인 후 작업을 진행함

connect는 하나의 데이터베이스에만 연결이 가능하므로
createConnection을 사용하는것을 추천

https://dev.to/maixuanhan/stop-using-the-mongoose-s-default-connection-4nnj

create


const testModel = require('./test');
testModel.create({
	test: 1,
    test1: 2
});

create 키워드로 document 생성 가능

update


updateOne, updateMany, findByIdAndUpdate, findOneAndUpdate

update~ 로 시작하는 명령어는 업데이트 결과를 리턴
find~ 로 시작하는 명령어는 업데이트 후 해당하는 document를 리턴

기본적으로 $set 키워드와 같이 사용 (document 전체를 업데이트 하지 않기때문에)
Mongo DB에서 직접 업데이트 할때는 document 전체 업데이트 가능

read


find, findById, findOne

~One 이 붙은 명령어는 단건, 안붙은 명령어는 여러개를 조회한다
~Id 가 붙은 명령어는 id를 이용하여 검색

const testModel = require('./test');

testModel.find({ test: 1 });
testModel.findById({ _id: "11" });

delete


deleteOne, deleteMany, findByIdAndDelete, findOneAndDelete

find 로 시작하는 명령어는 document를 반환해줌

query


$lt, $lte, $gt, $gte 키워드를 사용하여 range query 로 사용
$in, $or 쿼리를 이용하여 where in, or 처럼 사용 가능

test: ['test', 'test1']  === test: { $in: ['test', 'test1'] }
배열로 넘겨줄 경우 자동으로 $in으로 변경되어 처리된다.

0개의 댓글