Mongoose

이정규 (가지마)·2023년 6월 2일
0

Mongoose는 Node.js와 MongoDB를 연결해주는 ODM입니다.

ODM(Object Document Mapping) : 객체와 문서를 1대1로 매칭하는 역할

MongoDB의 ODM은 다양하지만 Mongoose가 가장 유명합니다.

MongoDB연결하기

1)require을 이용하는 방법

const mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/<db이름>",{useNewUrlParser:true});

2)import를 이용하는 방법

import mongoose from 'mongoose';
mongoose.connect('mongodb://localhost/<db이름>',{useNewUrlParser:true});

우선 mongoose 모듈을 require혹은 import해준후 connect 메소드를 통해 MongoDB에 연결해야함

connect 메소드의 인자로는 mongodb url(기본적으로 localhost를사용)과 useNewUrlParser와같이 error가 발생하지 않도록 다른 인자들을 객체 형식으로 선언함.

Schema 생성하기

Mongoose는 Schema라는 개념이 존재함.

스키마는 SQL의 table과 비슷한 개념임. 데이터를 넣을때 schema에서 선언한 틀에 맞게 데이터를 넣을 수 있도록 해줌.

ex)스키마 생성

import mongoose from 'mongoose';

const imageSchema = new mongoose.Schema({
  width:Number,
  height:Number,
});

const developerSchema = new mongoose.Schema({
  name:{type:String,required:true},
  age:{type:Number, required:true},
  image: imageSchema,
  nickname:String,
  language:String,
  friends:[String],
});

const model = mongoose.model('Developer',developerSchema); // model객체 생성후 그 객체에 스키마 model을 넣어줌.

Populate사용하기

ex)

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const personSchema = Schema({
  _id:Schema.Types.ObjectId,
  name:String,
  age:Number,
  stories:[{type:Schema.Types.ObjectId,ref:'Story'}]
});

const storySchema = Schema({
  author:{type:Schema.Types.ObjectId, ref:'Person'},
  title:String,
  fans:[{type:Schema.Types.ObjectId,ref:'Person'}]
});

위의 _id와 stories를 보면 타입으로 Schema.Types.ObjectId가 지정되어있음.
MongoDB에서는 데이터가 차곡차곡 쌓일때 그 데이터 하나하나를 document라고 한다.

_id와 stories는 그 document를 가리키는 타입임

실제로 데이터를 조회하면?

 { _id: {$oid : 5a23c1b5d52a003c98e13f1c},
  name: 'CharmSae',
  age: 16, 
  stories : {$oid :5a23c1b5d52a003c98e13f1b},
  }

이런 형식으로 조회가됨.

Populate는 이런 id값을 펼쳐서 보여주는 기능임.

Queries

데이터를 조회하는 방식인 Query임

findOne()

const query = Person.findOne({name:'charmsae'});
//Person이라는 컬렉션 안에서 name이 charmsae인 documents를 하나 불러옴.

find()

const query = Person.find({name:'charmsae'});
//Person이라는 컬렉션 안에서 name이 charmsae인 documents를 '모두' 불러옴.

deleteOne()

const query = Person.deleteOne({name:'charmsae'});
//Person이라는 컬렉션 안에서 name이 charmsae인 documents를 하나 삭제함. 

deleteMany()

const query = Person.deleteMany({name:'charmsae'});
//Person이라는 컬렉션 안에서 name이 charmsae인 documents를 모두 삭제함. 

sort()

const query = Person.find({name:'charmsae'}).sort(age:-1);
//Person이라는 컬렉션 안에서 name이 charmsae인 모든 document를 age순으로 정렬함 
//이떄 use: 1이면 오름차순 age:-1이면 내림차순으로 정렬함. 

select()

const query = Person.findOne({name:'charmsae'}).select('age');
//Person이라는 컬렉션 안에서 name이 charmsae인 documents를 하나 조회한뒤 
//age 필드만 가져옴. 

profile
"꾸준함이 답이다."

0개의 댓글