node.js

[Node.js] #8 몽고디비 몽고DB

로춘남 2021. 11. 19. 13:10
728x90


1. NoSQL vs SQL

SQL(MySQL) NoSQL(몽고디비)
- 규칙에 맞는 데이터 입력
- 테이블 간 JOIN 지원
- 안정성, 일관성
- 용어(테이블, 로우, 컬럼)
- 자유로운 데이터 입력
- 컬렉션 간 JOIN 미지원
- 확장성, 가용성
- 용어(컬렉션, 다큐먼트, 필드)
[CRUD]

mongo
use nodejs;

[Create]
db.users.save({ name: '로춘남', age: 30, married: false, comment: '안녕하세요.', createdAt: new Date() });

[Read]
//모두 조회
db.user.find({});
//특정 필드 조회
db.user.find({}, { _id: 0, name: 1, married: 1 });

[Update]
db.users.update({ name: '로춘남' }, { $set: { comment: '안녕하세요.' } });

[Delete]
db.users.remove({ name: 'nero' });

 

2. 몽구스 사용

MySQL에 시퀄라이즈가 있다면 몽고디비에는 몽구스(Mongoose)가 있다. 몽고디비는 릴레이션이 아니라 다큐먼트를 사용하므로 ORM이 아니라 ODM이다. 몽구스를 사용하는 이유는 몽고디비에 없는 불편한 기능들을 보완해주기 때문이다. 먼저 스키마(Schema)라는 것이 생겼다. 몽고디비는 테이블이 없어서 자유롭게 데이터를 넣을 수 있지만, 때로는 자유로움이 불편함을 초래하기도한다. 실수로 잘못된 자료형의 데이터를 넣을 수도 있고, 다른 다큐먼트에는 없는 필드의 데이터를 넣을 수도 있다. 몽구스는 몽고디비에 데이터를 넣기 전에 노드 서버 단에서 데이터를 한번 필터링하는 역할을 한다.

또한 MySQL에 있는 JOIN 기능을 populate라는 메서드로 어느 정도 보완이 가능. 따라서 관계가 있는 데이터를 쉽게 가져올 수 있다.


참 조 : Node.js 교과서(개정 2판)

728x90