몽고디비의 특징 중 하나는 자바스크립트 문법을 사용한다는 것이며, 데이터베이스까지 몽고디비를 사용하면 자바스크립트만을 사용해서 웹애플리케이션을 만드므로 생산성이 매우 높아진다.
$ mongo admin -u [이름] -p [비밀번호]
> use [데이터베이스명]
> show dbs
-> 데이터를 한 개 이상 넣어야 목록에 표시된다.
> db
** 컬렉션을 따로 생성하지 않아도 다큐먼트를 넣는 순간 컬렉션이 자동으로 생성된다.
> db.createCollection('컬렉션명')
> show collections
컬렉션에 컬럼을 정의하지 않아도 되므로 컬렉션에는 아무 데이터나 넣을 수 있다. 이것이 몽고디비의 장점이자 무엇이 들어올지 모른다는 단점이다.
기본적으로 몽고디비는 자바스크립트 문법을 사용해서 자바스크립트의 자료형을 따르지만 추라고 몇 가지 자료형이 더 있다.
> db.컬렉션명.save(다큐먼트)
> db.컬렉션명.find({});
-> 컬렉션 내의 모든 다큐먼트를 조회하라는 의미
> db.컬렉션명.find({}, {_id:0, name:1, married: 1});
-> 조회할 필드에만 true 를 의미하는 1을 넣고, 조회하지 않는 필드에는 false를 의미하는 0을 넣었다.
> db.users.find({ age: {$gt: 30}, married: true}, {_id:0, name: 1, age: 1});
-> age가 30초과이고 married가 true 인 다큐먼트의 이름과 나이를 조회함.
> db.users.find({ $or: [{ age: {$gt: 30}}, {married: false}]}, {_id: 0, name: 1, age: 1});
-> age가 30초과 이거나 married가 false dls 다큐먼트 조회
> 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: '안녕하세요. 수정한 필드입니다.' } });
-> $set 연산자를 사용해서 수정하고, 성공했다면 첫 번째 객체에 해당하는 다큐먼트 수(nMatched)와 수정된 다큐먼트 수(nModified)가 나온다.
> db.users.remove({ name: 'nero' })
-> 삭제 성공시 삭제된 개수가 반환된다.
MySQL에 시퀄라이즈가 있다면 몽고디비에는 몽구스(Mongoose)가 있다.
몽구스는 ODM(Object Document Mapping)이라고 불린다. 그 이유는 몽고디비가 다튜먼트를 사용하기 때문이다.
몽구스는 몽고디비에 없어서 불편한 기능들을 보완해준다. 스키마(schema)가 생겼다. 몽구스는 몽고디비에 데이커를 넣기 전에 노드 서버 단에서 데이터를 한 번 필터링하는 역할을 한다.
또한, MySQL JOIN 기능을 populate라는 메서드로 어느 정도 보완한다.
** [ ] 부분은 있어도 되고 없어도 된다.
username, password 에는 몽고디비 계정 이름과 비밀번호를 넣는다.
host = localhost,
port = 27017
계정이 있는 database가 admin 이므로
mongodb://이름:비밀번호@localhost:27017/admin
이렇게 입력하면 된다.
몽두스 모듈에서 Schema 생성자를 사용해 스키마를 만드는데, 특이한 점은 String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array 를 값을 ㅗ가질 수 있다는 점이다.
몽고디비의 자료형과는 조금 다르며 편의를 위해 종류 수를 줄였다.
컬렉션 이름 바꾸기
몽구스는 model 메서드의 첫 번째 인수로 컬렉션 이름을 만든다. 예를들어 첫 번째 인수가 User 라면 첫 글자를 소문자로 만든 뒤 복수형으로 바꿔서 users 컬렉션을 생성한다.
이런 강제 개명이 싫다면 세번째 인수로 컬렉션 이름을 줄 수 있다.
mongoose.model('User', userSchema, 'user_table');
-> users 컬렉션 대신 user_table 컬렉션이 생성된다.