몽고디비의 특징 중 하나는 자바스크립트 문법을 사용한다는 것이며, 데이터베이스까지 몽고디비를 사용하면 자바스크립트만을 사용하여 웹애플리케이션을 만드므로 생산성이 높아진다.
대표적인 차이점
- 고정된 테이블이 없으므로 자유로운 데이터 입력이 가능
- 컬렉션 간 JOIN 미지원
- 확장성과 가용성이 좋음
- 용어의 차이 컬렉션, 다큐먼트, 필드
$ mongod
$ mongo
$ use admin
$ db.createUser({ user: '이름', pwd: '비밀번호', roles: ['root'[ })
$ mongo --auth
$ mongo admin - u [이름] -p [비밀번호]
> use [데이터베이스명]
> show dbs
>db
> db.createCollection('컬렉션명')
** 컬렉션을 따로 생성하지 않아도 다큐먼트를 넣는 순간 컬렉션이 자동으로 생성된다.
> show collections
컬렉션에 컬럼을 정의하지 않아도 되므로 컬렉션에는 아무 데이터나 넣을 수 있다. 이것이 몽고디비의 장점이자 무엇이 들어올지 모른다는 단점이다.
기본적으로 몽고디비는 자바스크립트 문법을 사용해서 자바스크립트의 자료형을 따르지만 몇 가지 자료형이 더 있다.
Binary Data, ObjectId, Int, Long, Decimal, Timestamp, JavaScripte 등
Binary Data, ObjectId, Timestamp만 자주사용됨.Undefined와 Symbol은 사용 X
> db.컬렉션명.save(다큐먼트)
> db.컬렉션명.find({});
↑컬렉션내 모든 다큐먼트 조회
- 특정 필드만 조회
> db.컬렉션명.find({}, {_id:0, name:1, married: 1}):
↑ 조회할 필드에만 true를 넣고, 조회하지 않을 필드에는 false를 넣는다.
> db.users.find({ age: {$gt: 30}, married: true}, {_id:0, name: 1, age: 1});
> db.users.find({}, {_id: 0, name: 1, age: 1}).sort({ age: -1})
↑ users라는 컬렉션에서 age 값을 기준으로 내림차순 정렬. -1은 내림차순, 1은 오름차순.
> db.users.find({}, {_id: 0, name: 1, age: 1}).sort({ age: -1 }).limit(1)
> db.users.find({}, {_id: 0, name: 1, age: 1 }).sort({ age: -1}).limit(1).skip(1)
> db.users.update({ name: 'nero' }, { $set: { comment: '안녕하세요. 이 필드를 바꿔보겠습니다.' } });
> db.users.remove({ name: 'nero' })
삭제 성공시 삭제된 개수 반환.
MySQL에 시퀄라이즈가 있다면 몽고디비에는 몽구스가 있다.
몽구스는 ODM이라 불린다. 그 이유는 몽고디비가 다큐먼트를 사용하기 때문이다.
몽구스는 몽고디비에 불편한 기능을 보완해준다.
몽구스를 통해 연결, 몽고디비는 주소를 사용해 연결합니다.
mongodb://[username:password@]host[:port]/[database][?options]]
mongodb://이름:비밀번호@localhost:27017/admin
[ ] 이부분은 없어도 되는 부분.
시퀄라이즈에서 테이블을 만들었던 것처럼 몽구스로 스키마를 만들수있다.
Schema 생성자를 사용해 스키마를 만듭니다.
schemas/user.js
const mongoose = require( 'mongoose');
const { Schema } = mongoose;
const userSchema = new Schema({
name: {
type: String,
required: true,
unique: true;
},
});
몽구스에서 _id는 생성하므로 적어줄 필요는 없다.
특이한 점은 String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array를 값으로 가질 수 있다는 점이다.