노드와 몽고디비 모두 자바스크립트 문법을 사용함. 즉, 하나의 언어를 사용하여 웹 애플리케이션을 만들 수 있음.
NoSQL은 RDBMS보다 뚜렷한 특징을 가지고 있음.
NoSQL(Not only SQL): 고정된 테이블이 없음. 예를 들어 MySQL로 users 테이블을 만든다면 name, age 등의 컬럼과 자료형, 옵션 등을 정의해야 하지만 몽고디비는 users 컬렉션만 만들면 끝임. 컬렉션에는 어떠한 데이터든 들어갈 수 있음. 또한 MySQL과 달리 JOIN 기능이 없고 데이터의 일관성이 덜함.
확장성: 데이터를 빠르게 넣을 수 있음.
가용성: 쉽게 여러 서버에 데이터를 분산할 수 있음.
MySQL의 테이블, 로우, 컬럼을 몽고디비에서는 각각 컬렉션, 다큐먼트, 필드라고 칭함.
애플리케이션을 만들 때 하나의 db에 국한되지 않고 SQL과 NoSQL을 동시에 사용할 수 있음.
document: 정렬된 키와 값의 집합으로, 객체에 들어있는 키:값 쌍들을 떠올리면 편함.몽고DB에 저장된 모든 도큐먼트는 _id를 가짐. _id는 도큐먼트를 식별할 수 있는 식별자 역할을 함.
mongod --ipv6 --auth
mongosh admin -u [이름] -p [비밀번호]
// 이름과 비밀번호가 잘 생성되었는지 확인하기 위한 절차
몽고디비 콘솔을 종료한 후 mongod --ipv6 --auth을 통해 로그인할 수 있음.
3. 데이터베이스 및 커넥션 생성하기
Advanced Connection Options 클릭 후 Authentication을Username/Password로 변경 후 계정 이름과 비밀번호를 입력할 수 있음. Connect버튼을 누르면 localhost:27017에 접속함.
기본적으로 admin, config, local 데이터베이스가 생성되어 있음.
데이터를 최소 한 개 이상 넣어야 목록에 표시됨.
다큐먼트를 넣는 순간 컬렉션도 자동으로 생성되므로 컬렉션은 따로 생성할 필요가 없음.
// 쉘에 접속 후 실행
> use [데이터베이스명]
// 데이터베이스를 만드는 명령어
> show dbs
// 데이터베이스 목록을 확인하는 명령어
> db
// 현재 사용 중인 데이터베이스를 확인하는 명령어
> db.createCollection('users')
// 직접 users 라는 컬렉션을 생성하는 명령어
> show collections
// 컬렉션 목록 확인
콘솔에서 데이터베이스 목록 확인
컴퍼스를 사용해서 같은 작업을 수행할 수 있음.
Create database nodejs 라는 데이터베이스를 만든 모습Create Collection을 통해 comments라는 컬렉션을 만든 모습
4. CRUD 작업하기
Create(생성)
몽고디비는 자바스크립트 문법을 사용하므로 자바스크립트의 자료형을 따름.
Date나 정규표현식 같은 자바스크립트 객체를 자료형으로 사용할 수 있음.
콘솔과 컴퍼스 둘 다 CRUD 작업이 가능함.
BinaryData,ObjectId,Int,Long,Decimal,Timestamp,JavaScript등의 추가적인 자료형이 있음.Undefined와Symbol은 몽고디비에서 자료형으로 사용하지 않으며, 추가적인 자료형 중에서ObjectId와BinaryData,Timestamp외에는 잘 사용되지 않음.
콘솔에서 명령이 성공적으로 수행되었다면acknowledged: true와insertedId: ObjectId 라는 응답을 줌.
$ mongosh
test> use nodejs;
switched to db nodejs
nodejs> db.users.insertOne({ name: 'zero', age: 24, married: false, comment: '안녕하세요. 간단히 몽고디비 사용 방법에 대해 알아봅시다.', createdAt: new Date() });
다큐먼트 = 하나의 데이터. 아래는 users, comments 컬렉션에 각각 다큐먼트를 만든 모습으로, commenter의 ObjectId에는 zero의ObjectId을 복사하여 넣어주었음.
컴퍼스에서 users 컬렉션에 다큐먼트를 만든 모습
컴퍼스에서 comments 컬렉션에 다큐먼트를 만든 모습
Read(조회)
find({})는 컬렉션 내의 모든 다큐먼트를 조회하라는 뜻임.
두 번째 인수로 조회할 필드를 넣으면 1 또는 true로 표시한 필드만 가져옴.
조회 시 조건을 주려면 첫 번째 인수 객체에 기입해야 함.
특수한 연산자: $gt(초과), $gte(이상), $lt(미만), $lte(이하), $ne(같지 않음), $or(또는), $in(배열 요소 중 하나)
몽고디비는 자바스크립트 객체를 사용해서 명령어 쿼리를 생성해야 하므로$gt같은 특수한 연산자가 사용됨. 이는 시퀄라이즈의 쿼리와 비슷함.