Responsive Advertisement

Node.js์—์„œ MongoDB ๋ฐ์ดํ„ฐ ์กฐํšŒํ•˜๊ธฐ: Find ๋ฉ”์„œ๋“œ ๊ฐ€์ด๋“œ

MongoDB๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” find ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” 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์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// 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();

์œ„ ์ฝ”๋“œ๋Š” Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ MongoDB ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

MongoDB์—์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒํ•˜๊ธฐ: find()

MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋ณธ ๋ฐฉ๋ฒ•์€ find() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. find()๋Š” ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋“ค์„ ๊ฒ€์ƒ‰ํ•ด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํšŒ: find()

์ปฌ๋ ‰์…˜์— ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด ์กฐ๊ฑด ์—†์ด find() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ users ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

// ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํšŒ ์˜ˆ์‹œ

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

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

        // ๋ชจ๋“  ์‚ฌ์šฉ์ž ์กฐํšŒ
        const users = await collection.find({}).toArray();
        console.log('์กฐํšŒ๋œ ์‚ฌ์šฉ์ž:', users);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์กฐํšŒ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

findAllData();

์œ„ ์ฝ”๋“œ๋Š” users ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์กฐํšŒํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. find() ๋ฉ”์„œ๋“œ๋Š” MongoDB์˜ ๋ฌธ์„œ๋“ค์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , toArray()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ด ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ํŠน์ • ์กฐ๊ฑด์œผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ: find()์™€ ํ•„ํ„ฐ ์‚ฌ์šฉ

ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด find() ๋ฉ”์„œ๋“œ์— ํ•„ํ„ฐ ์กฐ๊ฑด์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚˜์ด๊ฐ€ 30 ์ด์ƒ์ธ ์‚ฌ์šฉ์ž๋งŒ ์กฐํšŒํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ํŠน์ • ์กฐ๊ฑด์œผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ

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

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

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

findFilteredData();

์œ„ ์ฝ”๋“œ๋Š” find() ๋ฉ”์„œ๋“œ์— ์กฐ๊ฑด์„ ์ „๋‹ฌํ•˜์—ฌ ๋‚˜์ด๊ฐ€ 30 ์ด์ƒ์ธ ์‚ฌ์šฉ์ž๋งŒ ์กฐํšŒํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. MongoDB์˜ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž์ธ $gte๋Š” "ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค"๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

3. ํŠน์ • ํ•„๋“œ๋งŒ ์กฐํšŒํ•˜๊ธฐ: find()์™€ projection ์‚ฌ์šฉ

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

// ํŠน์ • ํ•„๋“œ๋งŒ ์กฐํšŒ

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

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

        // ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋‚˜์ด๋งŒ ์กฐํšŒ
        const users = await collection.find({}, { projection: { name: 1, age: 1, _id: 0 } }).toArray();
        console.log('์กฐํšŒ๋œ ์‚ฌ์šฉ์ž (์ด๋ฆ„, ๋‚˜์ด):', users);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์กฐํšŒ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

findSpecificFields();

์œ„ ์ฝ”๋“œ๋Š” projection์„ ์‚ฌ์šฉํ•˜์—ฌ name๊ณผ age ํ•„๋“œ๋งŒ ์กฐํšŒํ•˜๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” _id ํ•„๋“œ๋Š” ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. 1์€ ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋ฉฐ, 0์€ ์ œ์™ธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

4. ๋ฐ์ดํ„ฐ ์ •๋ ฌํ•˜๊ธฐ: sort()

๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ sort() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚˜์ด ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

// ๋ฐ์ดํ„ฐ ์ •๋ ฌ ์˜ˆ์‹œ

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

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

        // ๋‚˜์ด ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        const users = await collection.find({}).sort({ age: 1 }).toArray();
        console.log('๋‚˜์ด ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ์‚ฌ์šฉ์ž:', users);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์กฐํšŒ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

findSortedData();

์œ„ ์ฝ”๋“œ๋Š” ๋‚˜์ด ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ(1)์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด 1 ๋Œ€์‹  -1์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

5. ์กฐํšŒ ๊ฒฐ๊ณผ ์ œํ•œํ•˜๊ธฐ: limit() ์‚ฌ์šฉ

๋งŽ์€ ๋ฐ์ดํ„ฐ ์ค‘ ์ผ๋ถ€๋งŒ ์กฐํšŒํ•˜๋ ค๋ฉด limit() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์œ„ 5๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ์กฐํšŒ ๊ฒฐ๊ณผ ์ œํ•œ ์˜ˆ์‹œ

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

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

        // ์ƒ์œ„ 5๊ฐœ์˜ ์‚ฌ์šฉ์ž๋งŒ ์กฐํšŒ
        const users = await collection.find({}).limit(5).toArray();
        console.log('์ƒ์œ„ 5๋ช…์˜ ์‚ฌ์šฉ์ž:', users);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์กฐํšŒ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

findLimitedData();

์œ„ ์ฝ”๋“œ๋Š” limit() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์œ„ 5๊ฐœ์˜ ๋ฌธ์„œ๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

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

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

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

๊ฒฐ๋ก 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Node.js์™€ MongoDB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ find() ๋ฉ”์„œ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. find() ๋ฉ”์„œ๋“œ๋Š” MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ, ๋‹ค์–‘ํ•œ ์กฐ๊ฑด๊ณผ ์ •๋ ฌ, ํ•„๋“œ ์ œํ•œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์กฐํšŒํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด๋ณด์„ธ์š”!

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