Responsive Advertisement

Node.js์—์„œ MongoDB ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ: Update ๊ฐ€์ด๋“œ

MongoDB๋Š” ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ ๋•๋ถ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” updateOne()๊ณผ updateMany() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Node.js์™€ MongoDB๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Node.js์™€ MongoDB ์—ฐ๋™ ์„ค์ •

MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋จผ์ € Node.js์™€ MongoDB๋ฅผ ์—ฐ๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด mongodb ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  MongoDB ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. MongoDB ์„ค์น˜ ๋ฐ ์„ค์ •

MongoDB๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, MongoDB Atlas์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์— MongoDB ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•œ ํ›„, ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ Node.js ํ”„๋กœ์ ํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  mongodb ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ mkdir myapp
$ cd myapp
$ npm init -y
$ npm install mongodb

2. MongoDB ์—ฐ๊ฒฐ ์„ค์ •

๋‹ค์Œ์€ MongoDB ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. MongoClient ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MongoDB์™€ Node.js๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// app.js

const { MongoClient } = require('mongodb');

// MongoDB ์—ฐ๊ฒฐ URL
const url = 'mongodb://localhost:27017'; // ๋กœ์ปฌ MongoDB URL
const client = new MongoClient(url);

// ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„
const dbName = 'myDatabase';

async function main() {
    try {
        // MongoDB ์—ฐ๊ฒฐ
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ
        const db = client.db(dbName);
        console.log(`๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ${dbName} ์„ ํƒ๋จ.`);
    } catch (error) {
        console.error('MongoDB ์—ฐ๊ฒฐ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        // MongoDB ์—ฐ๊ฒฐ ์ข…๋ฃŒ
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

main();

์œ„ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด MongoDB ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

MongoDB์—์„œ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

MongoDB์—์„œ๋Š” updateOne()๊ณผ updateMany() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. updateOne()์€ ์กฐ๊ฑด์— ๋งž๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฌธ์„œ๋งŒ ์ˆ˜์ •ํ•˜๊ณ , updateMany()๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

1. ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ: updateOne()

ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์„œ๋งŒ ์ˆ˜์ •ํ•˜๋ ค๋ฉด updateOne() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฆ„์ด 'John Doe'์ธ ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋ฅผ 35๋กœ ์ˆ˜์ •ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์˜ˆ์‹œ

async function updateSingleData() {
    try {
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        const db = client.db(dbName);
        const collection = db.collection('users');

        // ์ด๋ฆ„์ด 'John Doe'์ธ ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋ฅผ 35๋กœ ์—…๋ฐ์ดํŠธ
        const result = await collection.updateOne({ name: 'John Doe' }, { $set: { age: 35 } });
        console.log('์—…๋ฐ์ดํŠธ๋œ ๋ฌธ์„œ ์ˆ˜:', result.modifiedCount);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

updateSingleData();

์œ„ ์ฝ”๋“œ๋Š” users ์ปฌ๋ ‰์…˜์—์„œ ์ด๋ฆ„์ด 'John Doe'์ธ ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด ํ•„๋“œ๋ฅผ 35๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. updateOne() ๋ฉ”์„œ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ๋กœ ์ˆ˜์ •๋œ ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ: updateMany()

์—ฌ๋Ÿฌ ๋ฌธ์„œ๋ฅผ ๋™์‹œ์— ์ˆ˜์ •ํ•˜๋ ค๋ฉด updateMany() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚˜์ด๊ฐ€ 30 ์ด์ƒ์ธ ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ 'Active'๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์˜ˆ์‹œ

async function updateMultipleData() {
    try {
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        const db = client.db(dbName);
        const collection = db.collection('users');

        // ๋‚˜์ด๊ฐ€ 30 ์ด์ƒ์ธ ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ 'Active'๋กœ ์—…๋ฐ์ดํŠธ
        const result = await collection.updateMany({ age: { $gte: 30 } }, { $set: { status: 'Active' } });
        console.log('์—…๋ฐ์ดํŠธ๋œ ๋ฌธ์„œ ์ˆ˜:', result.modifiedCount);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

updateMultipleData();

์œ„ ์ฝ”๋“œ๋Š” ๋‚˜์ด๊ฐ€ 30 ์ด์ƒ์ธ ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ 'Active'๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. updateMany() ๋ฉ”์„œ๋“œ๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉฐ, ์ˆ˜์ •๋œ ๋ฌธ์„œ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3. ๋ฐ์ดํ„ฐ์— ํ•„๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ: $set ์—ฐ์‚ฐ์ž

๊ธฐ์กด ๋ฌธ์„œ์— ์ƒˆ๋กœ์šด ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋„ $set ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ 'membership' ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐ’์„ 'Free'๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ํ•„๋“œ ์ถ”๊ฐ€ ์˜ˆ์‹œ

async function addFieldToAllUsers() {
    try {
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        const db = client.db(dbName);
        const collection = db.collection('users');

        // ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ 'membership' ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐ’์„ 'Free'๋กœ ์„ค์ •
        const result = await collection.updateMany({}, { $set: { membership: 'Free' } });
        console.log('ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ ๋ฌธ์„œ ์ˆ˜:', result.modifiedCount);
    } catch (error) {
        console.error('ํ•„๋“œ ์ถ”๊ฐ€ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

addFieldToAllUsers();

์œ„ ์ฝ”๋“œ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ 'membership' ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ด๋‹น ํ•„๋“œ ๊ฐ’์„ 'Free'๋กœ ์„ค์ •ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. $set ์—ฐ์‚ฐ์ž๋Š” ๊ธฐ์กด ํ•„๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ผ๋ถ€ ์ˆ˜์ •ํ•˜๊ธฐ: $inc ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

์ˆซ์ž ํ•„๋“œ์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๊ฑฐ๋‚˜ ๊ฐ์†Œ์‹œํ‚ค๋ ค๋ฉด $inc ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ๋ฐ์ดํ„ฐ ์ผ๋ถ€ ์ˆ˜์ • ์˜ˆ์‹œ

async function incrementUserAge() {
    try {
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        const db = client.db(dbName);
        const collection = db.collection('users');

        // ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋ฅผ 1์”ฉ ์ฆ๊ฐ€
        const result = await collection.updateMany({}, { $inc: { age: 1 } });
        console.log('๋‚˜์ด๊ฐ€ ์ฆ๊ฐ€๋œ ๋ฌธ์„œ ์ˆ˜:', result.modifiedCount);
    } catch (error) {
        console.error('๋‚˜์ด ์ฆ๊ฐ€ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

incrementUserAge();

์œ„ ์ฝ”๋“œ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. $inc ์—ฐ์‚ฐ์ž๋Š” ์ง€์ •๋œ ํ•„๋“œ์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๊ฑฐ๋‚˜ ๊ฐ์†Œ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

MongoDB ์—ฐ๊ฒฐ ์ข…๋ฃŒ

๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„์—๋Š” MongoDB ์—ฐ๊ฒฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. client.close() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด MongoDB ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// MongoDB ์—ฐ๊ฒฐ ์ข…๋ฃŒ
await client.close();
console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

๊ฒฐ๋ก 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Node.js์™€ MongoDB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. MongoDB์˜ updateOne()๊ณผ updateMany() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์„œ๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, $set๊ณผ $inc์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์“ฐ๊ธฐ