자바스크립트 문법
NoSQL
1. https://www.mongodb.com/try/download/community
2. C:\data\db 폴더 만들기: 데이터가 저장될 폴더
3. 몽고디비 실행: C:\Program Files\MongoDB\Server\5.0\bin 콘솔(1)에서 mongod명령어 입력
4. 몽고디비 프롬프트(>) 접속: C:\Program Files\MongoDB\Server\5.0\bin 콘솔(2)에서 mongo 명령어 입력
5. 관리자 계정 추가
use admin
db.createUser({user: '이름', pwd: '비밀번호', roles: ['root']})
6. mongod를 입력한 콘솔(1)을 종료한 뒤, mogod --auth명령어로 접속
7. mongo를 입력했던 콘솔(2) 종료한 뒤, mongo admin -u 이름 -p 비밀번호 명령어로 접속
컴퍼스: 몽고디비 관리도구, GUI를 통해 데이터를 시각적으로 관리할 수 있어 편리
1. 몽고디비 실행한 후 컴퍼스로 접속
2. New Connection 화면에서 Fill in connection fields individualy 클릭
3. Authentication을 User/Password로 바꾸고 몽고디비 계정 이름과 비밀번호 입력, CONNECT 버튼을 눌러 localhost:27017에 접속(admin, config, local 데이터베이스)
컬렉션에 컬럼을 정의하지 않아도 되므로 컬렉션에는 아무 데이터나 넣을 수 있음
자바스크립트 자료형 + 추가 자료형
몽고디비 자료형: Data나 정규표현식 같은 자바스크립트 객체
Binary Data, ObjectId, Int, Long, Decimal, Timestamp, JavaScript 등의 추가적인 자료형
Undefined와 Symbol은 몽고디비에서 자료형으로 사용되지 않음
ODM(Object Document Mapping): 몽고디비는 릴레이션이 아니라 다큐먼트를 사용
몽고디비에 없는 기능들을 몽구스가 보완: 스키마(몽고디비에 데이터 넣기 전에 노드 서버에서 필터링), populate 메서드(JOIN 기능)
ES2015 프로미스 문법과 강력하고 가독성이 높은 쿼리 빌더 지원
패키지 설치: npm i express morgan nunjucks mongoose
npm i -D nodemon
mongoose.connect('mongodb://[username]:[password]@localhost:27017/admin', {
dbName: 'nodejs',
useNewUrlParser: true,
useCreateIndex: true,
}, (error) => {
if (error) {
console.log('몽고디비 연결 에러', error);
} else {
console.log('몽고디비 연결 성공');
}
});
const mongoose = require('mongoose');
const { Schema } = mongoose;
const userSchema = new Schema({
name: {
type: String,
required: true,
unique: true,
},
age: {
type: Number,
required: true,
},
married: {
type: Boolean,
required: true,
},
comment: String,
createdAt: {
type: Date,
default: Date.now,
},
});
module.exports = mongoose.model('User', userSchema);
const mongoose = require('mongoose');
const { Schema } = mongoose;
const { Types: { ObjectId } } = Schema;
const commentSchema = new Schema({
commenter: {
type: ObjectId,
required: true,
ref: 'User',
},
comment: {
type: String,
required: true,
},
createdAt: {
type: Date,
default: Date.now,
},
});
module.exports = mongoose.model('Comment', commentSchema);
const express = require('express');
const User = require('../schemas/user');
const router = express.Router();
router.get('/', async (req, res, next) => {
try {
const users = await User.find({});
res.render('mongoose', { users });
} catch (err) {
console.error(err);
next(err);
}
});
module.exports = router;
const express = require('express');
const User = require('../schemas/user');
const Comment = require('../schemas/comment');
const router = express.Router();
router.route('/')
.get(async (req, res, next) => {
try {
const users = await User.find({});
res.json(users);
} catch (err) {
console.error(err);
next(err);
}
})
.post(async (req, res, next) => {
try {
const user = await User.create({
name: req.body.name,
age: req.body.age,
married: req.body.married,
});
console.log(user);
res.status(201).json(user);
} catch (err) {
console.error(err);
next(err);
}
});
router.get('/:id/comments', async (req, res, next) => {
try {
const comments = await Comment.find({ commenter: req.params.id })
.populate('commenter');
console.log(comments);
res.json(comments);
} catch (err) {
console.error(err);
next(err);
}
});
module.exports = router;
const express = require('express');
const Comment = require('../schemas/comment');
const router = express.Router();
router.post('/', async (req, res, next) => {
try {
const comment = await Comment.create({
commenter: req.body.id,
comment: req.body.comment,
});
console.log(comment);
const result = await Comment.populate(comment, { path: 'commenter' });
res.status(201).json(result);
} catch (err) {
console.error(err);
next(err);
}
});
router.route('/:id')
.patch(async (req, res, next) => {
try {
const result = await Comment.update({
_id: req.params.id,
}, {
comment: req.body.comment,
});
res.json(result);
} catch (err) {
console.error(err);
next(err);
}
})
.delete(async (req, res, next) => {
try {
const result = await Comment.remove({ _id: req.params.id });
res.json(result);
} catch (err) {
console.error(err);
next(err);
}
});
module.exports = router;
혹시! 연결이 계속 안되는 오류가 반복된다면, mongoose 버전 문제일 수 있으니,
npm uninstall mongoose
npm i moongoose@4
*퀴즈*
1. 몽고디비는 (NoSQL/SQL) 데이터베이스이다.
2. 몽고디비는 JOIN기능은 없지만 이와 비슷한 기능을 하는 (populate)메서드를 가진다.
3. 몽고디비는 테이블 대신 (컬렉션)이라는 개념을 가지고 이 점 때문에 (컬럼)을 따로 정의하지 않는다.
4. 몽고디비를 실행하는 명령어는 (mongod)이다.
5. 몽고디비에서 users컬렉션에 있는 모든 다큐먼트를 나이가 적은 순서대로 정렬하는 명령어는?
db.users.find({}).sort({age: 1})
6. mysql의 시퀄라이즈가 있다면 몽고디비에는 (몽구스)가 있다. 이것은 릴레이션이 아니라 다큐먼트를 사용하므로 (ODM)이라고 부른다.
[Node.js] 10장 웹 API 서버 만들기 (0) | 2021.12.27 |
---|---|
[Node.js] 9장 익스프레스로 SNS 서비스 만들기 (0) | 2021.12.27 |
[Node.js] 7장 MySQL (0) | 2021.11.29 |
[Node.js] 6장 익스프레스 웹 서버 만들기 (0) | 2021.11.15 |
[Node.js] 5장 패키지 매니저 (0) | 2021.11.08 |