개발 블로깅/Server&DataBase 개념

[2019.05.11] Express환경에서 mongoDB 사용하기

Hello이뇽 2019. 5. 11. 09:55

 

 

# mongoDB 개념 및 설치, 실행방법 

 

mongoDB의 개념과 설치, 실행 방법은 이전에 블로깅 한 내용이 있어서 링크로 대체!

https://helloinyong.tistory.com/42

 

[2019.03.26] NoSQL MongoDB 기초

MongoDB는 NoSQL의 종류 중 하나이다. NoSQL은 빅데이터 기반의 데이터베이스로, 정해진 칼럼이 아니라 컬렉션에 document가 계속 추가되는 방식이다. # MySQL과의 비교 mysql은 database를 새로 만들어주고 tabl..

helloinyong.tistory.com

 

# express에서 MongoDB 사용법

express 안에서 mongoDB를 사용하기 위해서는 mongoose 모듈을 설치해야 한다.

npm i -D mongoose

 

node에서 mongoDB를 연동하려면, mongoDB 서버가 실행되고 있어야 한다.

mongoDB가 설치되어 있다면, 터미널에서 mongoDB 서버를 실행시킨다.

$ mongod

 

이제 node 서버에서 mongoDB를 접속해보자. node 안에서 mongoDB를 접속하는 방법은 아래와 같다.

const mongoose = require('mongoose');

mongoose.connect(/* mongoDB서버 URL */);
const db = mongoose.connection;
db.on('error', console.error);  // mongoDB 연동 실패 시 에러 메시지 출력
db.once('open', () =>{
  console.log('connected to mongoDB server'); // mongoDB 연동 성공 시 메시지 출력
});

 

* mongoDB 서버의 URL 확인하는 방법

$ mongo // mongod 명령어로 서버 실행시킨 상태에서, 다른 터미널로 해당 명령어 실행

위처럼 DB 서버의 URL을 확인할 수 있다.


# mongoDB 스키마 생성

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

/* 스키마 생성 */
const User = new Schema({
  username: String,
  password: String,
  admin: {type: Boolean, default: false}
});

/* 해당 스키마에 데이터 추가 */
User.statics.create = function(username, password){
  const user = new this({
    username,
    password
  });
  return user.save();
};

/* 해당 스키마의 데이터 조회 */
User.statics.findOne = function(username){
  return this.findOne({
    username
  }).exec();
}

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

 

위와 같이, 스키마를 구조에 맞게 생성하고, 해당 스키마에 추가, 조회 등 


# 스키마 사용

스키마에서 실행된 반환 값은 전부 Promise이므로 then을 꼭 써줘야 한다.

 조회하기

const User = require('./user'); // 스키마를 받아옴

User.find({})
.then( users=>{
  console.log(users); // 모든 유저 정보 출력
});

User.findOne({name:'inyong'})
.then(user=>{
  console.log(user);  // 해당 유저 정보 출력
});

 

수정하기

Users.findOneAndUpdate({name:'inyong'},{name:'inyong2'}, {multi: true, new: true})

 

  • 첫 번째 매개변수 : 찾을 정보
  • 두 번째 매개변수 : 변경 내용
  • 세 번째 매개변수 : 옵션 (multi : 해당 정보 모두 변경 여부, new: 업데이터 변경사항 반환 여부)

 

삭제하기

User.findOneAndRemove({name:'inyong'})

 

스키마에 등록한 메서드 사용하기

User.create('inyong', '1234')
.then(user=>{
  console.log(user); // 저장된 유저 정보 출력
});

스키마에 등록한 메서드는, 스키마 생성 후에 statics로 적용했던 메서드이다.

 


express와 mongoDB를 연동해서 사용하는 법을 대략적으로만 작성해봤다. 

제로초님께 감사! https://www.zerocho.com/category/MongoDB/post/59a1870210b942001853e250

 

(MongoDB) Mongoose(몽구스) 스키마(Schema)

안녕하세요. 이번 시간에는 몽구스 스키마에 대해 알아보겠습니다. 지난 시간에 몽구스는 스키마가 장점이라고 말씀드렸죠? MySQL같은 SQL에 익숙하신 분들은 처음에 MongoDB나 Redis같은 nosql을 사용하면 헤맵니다. 바로 테이블이 없기 때문입니다. 다큐먼트에

www.zerocho.com

 

몽고 DB는 이머시브 개강 전에 잠깐 다뤄봤었는데, 이렇게 솔로 위크 때 다시 사용을 해 볼 수 있는 기회를 가진 것 같아 너무 좋다.

그런데 아직 몽고 디비를 어떤 방식으로 써야 잘 사용하는 건지를 잘 모르겠다... 

그냥 mysql 대체용으로 사용할 수 있는 것일까... 2주 차 프로젝트 때 써먹어볼까...

 

반응형