728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
๐ ๊ฒ์๋ฌผ๋ง๋ค _id ๋ฌ์์ ์ ์ฅํ๊ธฐ
- MongoDB ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๊ฐ์ ๋ก ์์ด๋๋ฅผ ๊ฐ์ ๋ก ๋ถ์ฌํด์ฃผ๊ธด ํ์ง๋ง, ์ง์ _id ๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ฒ ์ถํ์ ์์ ๋ฐ ์ญ์ ๊ฐ ์ฉ์ดํ๋ค.
- _id ๋ ์๋์ ์ฝ๋์ ๊ฐ์ด /add ๊ฒฝ๋ก๋ก POST ํ ๋ ๋ฐ์ดํฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
(๋ฌผ๋ก ์๋์ ์ฝ๋๋ ์์๋ผ์ _id : 1 ์ด๋ผ๊ณ ํ๋์ฝ๋ฉํ์ ๋ฟ ์ค์ ๋ก๋ ํ๋์ฝ๋ฉํ๋ฉด ์๋๋ค.)
app.post('/add', function(req, res){
์๋ต.send('์ ์ก ์๋ฃ');
db.collection('post').insertOne( { _id : 1, ํ ์ผ : req.body.content, ๋ง๊ฐ์ผ : req.body.date } , function(){
console.log('๋ฐ์ดํฐ ์ ์ฅ ์๋ฃ')
});
});
- ๋ค๋ฅธ DB ์์๋ _id ๋ฅผ ์๋์ผ๋ก ์ฆ๊ฐ์์ผ์ ์ถ๊ฐํด์ฃผ๋ Auto Increment ๋ผ๋ ๊ธฐ๋ฅ์ด ์์ง๋ง MongoDB ์๋ ๊ทธ์ ๊ฐ์ ๊ธฐ๋ฅ์ด ์์ผ๋ฏ๋ก ์ง์ ๋ช๋ฒ ๊ฒ์๋ฌผ์ ๋ฐํํ๋์ง ๊ธฐ๋กํด๋์ด์ผ ํ๋ค.
- ๋ณดํธ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐํ๋ ๋๋ง๋ค 'ํ์ฌ๊น์ง ๋ฐํ๋ ๊ฒ์๋ฌผ ๊ฐ์ + 1' ์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๐ ํ์ฌ๊น์ง ๋ฐํ๋ ๊ฒ์๋ฌผ ๊ฐ์ ๊ธฐ๋กํ๊ธฐ
- 'ํ์ฌ๊น์ง ๋ฐํ๋ ๊ฒ์๋ฌผ ๊ฐ์ + 1' ์ ํ๊ธฐ ์ํด์๋ ํ์ฌ๊น์ง ๋ฐํ๋ ๊ฒ์๋ฌผ ๊ฐ์๋ฅผ ์์์ผ ํ๋ค.
- ํ์ฌ๊น์ง ๋ฐํ๋ ๊ฒ์๋ฌผ ๊ฐ์๋ฅผ ๊ธฐ๋กํ๊ธฐ ์ํด MongoDB ์์ counter ๋ผ๋ collection ์ ํ๋ ๋ ๋ง๋ค์ด์ฃผ์๋ค.
- counter collection ์ ์์ฑํ์ผ๋ฉด, INSERT DOCUMENT ๋ฒํผ์ ํด๋ฆญํ๊ณ ์๋์ ๊ฐ์ด ๋ด์ฉ์ ์์ฑํด์ค๋ค.

- totalPosts ํญ๋ชฉ์ ์ซ์๊ฐ ๋ค์ด๊ฐ์ผํ๋ฏ๋ก ํ์ ์ Int32๋ก, ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ์ ํ ํด์ฃผ์๋ค.
- ์์ผ๋ก๋ ์๋ก์ด ๊ฒ์๋ฌผ์ด ๋ฐํ๋๋ฉด totalPosts ์ ๋ช๋ฒ์งธ ๊ฒ์๋ฌผ์ด ๋ฐํ๋์๋์ง ๊ธฐ๋ก ๋ฐ ์ ์ฅ๋๋ค.
๐ POST ์์ฒญ ์ฝ๋ ์์ ํ๊ธฐ
// ๋๊ตฐ๊ฐ๊ฐ ํผ์์ /add ๋ก POST ์์ฒญ์ ํ๋ฉด
app.post('/add', function(req, res){
res.send('์ ์ก์๋ฃ');
// ๊ฒ์๋ฌผ๋ง๋ค ๋ฒํธ๋ฅผ ๋ฌ์ ์ ์ฅํ๊ธฐ
// DB.counter ๋ด์์ '์ด๊ฒ์๋ฌผ๊ฐ์'๋ฅผ ์ฐพ์์
db.collection('counter').findOne({name : '์ด๊ฒ์๋ฌผ๊ฐ์'}, function(err, result){
// console.log(result.totalPosts);
// '์ด๊ฒ์๋ฌผ๊ฐ์' ์ totalPosts ๊ฐ์ totalPosts ๋ณ์์ ์ ์ฅ
var totalPosts = result.totalPosts;
// ์ด์ DB.post ์ ๋ฒํธ๋ฅผ ๋จ ์๋ก์ด ๊ฒ์๋ฌผ์ ์ถ๊ฐ
db.collection('post').insertOne({_id : totalPosts + 1, ํ ์ผ: req.body.content, ๋ง๊ฐ์ผ : req.body.date}, function(err, result){
console.log('๋ฐ์ดํฐ ์ ์ฅ ์๋ฃ!');
// DB.counter ์ '์ด๊ฒ์๋ฌผ๊ฐ์' ์ totalPosts ๊ฐ์ 1์ฉ ์ฆ๊ฐ
db.collection('counter').updateOne({name : '์ด๊ฒ์๋ฌผ๊ฐ์'},{ $inc : {totalPosts: 1} }, function(err, result){
console.log('๋ฐ์ดํฐ ์
๋ฐ์ดํธ ์๋ฃ!');
});
});
});
})
- ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ถ์ ๋์๋ updateOne() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ, ์ด ํจ์์ ๊ฒฝ์ฐ 3๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ์๋ก ํ๋ค.
- ์ข์ธก : {name : '์ด๊ฒ์๋ฌผ๊ฐ์'} ์ ๊ฐ์ ์๋ฃ์ ์ด๋ฆ ํน์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑ
- ์ค์ : operator ๋ฌธ๋ฒ ๋ฐ ์ ์ฉ๋ ์๋ฃ ์์ฑ
$set ์ ์๋ฃ์ ๊ฐ์ ๊ธฐ์ฌ๋ ์ซ์๋ก ๋ณ๊ฒฝ, $inc ๋ ๊ธฐ์ฌ๋ ์ซ์๋งํผ ์๋ฃ์ ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค๋ ์๋ฏธ! - ์ฐ์ธก : ์ฝ๋ฐฑํจ์
- ๋ฐ๋ผ์, ๋ฐ์ดํฐ๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ฏ๋ก { $inc : {totalPosts : 1} } ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ค.
๐ DB ์์ ๊ฒ์๋ฌผ _id ๋ถ์ฌ ์ฌ๋ถ ํ์ธํ๊ธฐ
๐ค counter

๐ค post

728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > Node.js MongoDB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js / MongoDB] ์์ธ ํ์ด์ง ๋ง๋ค๊ธฐ (0) | 2022.03.12 |
---|---|
[Node.js / MongoDB] AJAX ๋ก ์ญ์ ์์ฒญํ๊ธฐ (0) | 2022.03.12 |
[Node.js / MongoDB] HTML ์ DB ๋ฐ์ดํฐ ๋ฃ์ด๋ณด๊ธฐ (0) | 2022.03.11 |
[Node.js / MongoDB] Database ์ ์๋ฃ ์ ์ฅํ๋ ๋ฒ (0) | 2022.03.11 |
[Node.js / MongoDB] MongoDB ์ ํ ํ๊ธฐ (0) | 2022.03.11 |