DataBase
๐ฑ ์ฌ๋ฌ ์ฌ์ฉ์์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๊ณต๋์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ค์ ์งํฉ
DBMS( DataBase Management System )
DataBase ํ์์ฑ
DataBase ํน์ง
๐ฑ ์ค์๊ฐ ์ ๊ทผ์ฑ, ์ง์์ ์ธ ๋ณํ, ๋์ ๊ณต์ , ๋ด์ฉ์ ๋ํ ์ฐธ์กฐ
Database/DBMS์ ์ข
๋ฅ
NoSQL
๐ฑ ์ฌ์ ์์ ์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ ๊ฐ๋ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ํฌ๊ฒ ๊ด์ฌํ์ง ์๊ณ ํ๋ก์ ํธ๋ฅผ ๋น ๋ฅด๊ฒ ์งํ ๊ฐ๋ฅ
MongoDB
๐ฑ
Document DB: ์๋ฃ๋ฅผ Document( ๋ฌธ์ )๋ก ์ ์ฅ
Database > Collection > Document
_id
๊ฐ ์กด์ฌMongoDB ์ค์นํ๊ธฐ
mongod
๋ฅผ ์คํํ ์ ์๋ค๋ฉด ์ค์น๋ ๊ฒ !mongosh
: MongoDB ์ ์ด ๊ฐ๋ฅํ ์์ด ์ด๋ฆผMongoose
๐ฑ ๊ฐ์ฅ ๋ํ์ ์ธ MongoDB ODM( object document mapping )
Join
์ ์ ๊ณตํ์ง ์์ โ aggregate
๋ผ๋ ๋ณต์กํ ์ฟผ๋ฆฌ ์์ฑํด์ผ ํจpopulate
๋ฅผ ํตํด aggregate
์์ฑ ์์ด๋ ๊ฐ๋จํ๊ฒ ๊ตฌํ ๊ฐ๋ฅMongoose ์ฌ์ฉํ๊ธฐ
๐ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ โ ์คํค๋ง ์ ์ โ ๋ชจ๋ธ ์์ฑ โ ๋ชจ๋ธ ์ฌ์ฉ
npm i mongoose
db.js
์์ฑ: DB ๊ด๋ จ ์ค์ index.js
: ์ํธ๋ฆฌ ํฌ์ธํธ์ db.js import// db.js
import mongoose from 'mongoose';
mongoose.connect(`${MongoDB URL}${DB์ ์ด๋ฆ}`);
const database = mongoose.connection; // ํ์ฌ DB ์ฐ๊ฒฐ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด
// on ๋ฉ์๋๋ก ์๋ฌ ๋ฐ์ ์ ์คํ๋๋ ๋์ ์ ์
database.on('error', (err) => {
console.log('Database Error!', err);
});
// once ๋ฉ์๋๋ก ์ต์ด ์ฐ๊ฒฐ ์ ํ ๋ฒ ์คํ๋๋ ๋์ ์ ์
database.once('open', () => {
console.log('DB connected');
});
// post.js
import { Schema } from 'mongoose';
const PostSchema = new Schema( // ์คํค๋ง ๊ฐ์ฒด ์์ฑ
{
title: String,
content: String,
required: true,
},
{
timestamps: true
},
);
// ์์ ์์ฑํ post.js์ ์ด์ด์ ์์ฑ
const Post = mongoose.model('Post', PostSchema);
// ์์ฑํ ์คํค๋ง ๊ธฐ๋ฐ ๋ชจ๋ธ ๊ฐ์ฒด ์์ฑ
// ์ฒซ ๋ฒ์งธ ์ธ์: ๋ชจ๋ธ์ ์ด๋ฆ, ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ colliction์ ์ด๋ฆ
// ๋ ๋ฒ์งธ ์ธ์: ์คํค๋ง ๊ฐ์ฒด
export default Post;
CRUD | ๋ชจ๋ธ ๊ฐ์ฒด์ ๋ฉ์๋ |
---|---|
Create | create |
Read | find , findeById , findOne |
Update | updateOne , updateMany , findByIdAndUpdate , findOneAndUpdate |
Delete | deleteOne ,deleteMany , findByIdAndDelete , findOneAndDelete |
๊ธฐํ | save |
๊ฐ๋จํ API ์ ์ํ๊ธฐ
tryโฆcatch
๋ก ์์ธ ์ฒ๋ฆฌ !!Create
postsRouter.post('/', async (req, res) => {
const { title, cocntent } =req.body;
try{
awiat Post.create({ title, content });
res.send('Post Successfully Created');
} catch (err) {
res.status(500).send('Server Error');
}
});
Read
postsRouter.get('/', async (req, res) => {
try{
const allPosts = await Post.find({})
res.json(allPosts);
} catch (err) {
res.status(500).send('Server Error');
}
});
postsRouter.get('/:id', async (req, res) => {
const { id } =req.params;
try{
const foundPost = await Post.findById(id);
if(!foundPost) res.status(404).send('Post not found');
else res.json(foundPosts);
} catch (err) {
res.status(500).send('Server Error');
return;
}
});
Update
postsRouter.put('/:id', async (req, res) => {
const { id } =req.params;
const { title, cocntent } =req.body;
try{
const foundPost = await Post.findByIdAndUpdate(id, {
title,
content,
});
if(!foundPost) res.status(404).send('Post not found');
else res.json(foundPosts);
} catch (err) {
res.status(500).send('Server Error');
}
});
Delete
postsRouter.put('/:id', async (req, res) => {
const { id } =req.params;
try{
const foundPost = await Post.findByIdAndDelete(id);
if(!foundPost) res.status(404).send('Post not found');
else res.json(foundPosts);
} catch (err) {
res.status(500).send('Server Error');
}
});