Responsive Advertisement

Node.js์—์„œ MongoDB ๋ฐ์ดํ„ฐ ์ œํ•œํ•˜๊ธฐ: Limit ์‚ฌ์šฉ ๊ฐ€์ด๋“œ

MongoDB๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ, ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด limit() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์—์„œ ๋ฐ˜ํ™˜ํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Node.js์™€ MongoDB๋ฅผ ์—ฐ๋™ํ•˜์—ฌ limit() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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์—์„œ ๋ฐ์ดํ„ฐ ์ œํ•œํ•˜๊ธฐ: limit() ์‚ฌ์šฉ๋ฒ•

MongoDB์—์„œ limit() ๋ฉ”์„œ๋“œ๋Š” ์กฐํšŒ ๊ฒฐ๊ณผ์—์„œ ๋ฐ˜ํ™˜ํ•  ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ฒ˜์Œ ๋ช‡ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์„ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ find() ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

1. ์ƒ์œ„ 5๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ

๋‹ค์Œ์€ users ์ปฌ๋ ‰์…˜์—์„œ ์ƒ์œ„ 5๋ช…์˜ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

// ์ƒ์œ„ 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();

์œ„ ์ฝ”๋“œ๋Š” users ์ปฌ๋ ‰์…˜์—์„œ ์ƒ์œ„ 5๋ช…์˜ ์‚ฌ์šฉ์ž๋งŒ ์กฐํšŒํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. limit(5) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ 5๊ฐœ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

2. ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ์ œํ•œํ•˜์—ฌ ์กฐํšŒํ•˜๊ธฐ

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

// ๋‚˜์ด๊ฐ€ 30 ์ด์ƒ์ธ ์‚ฌ์šฉ์ž ์ค‘ ์ƒ์œ„ 3๋ช… ์กฐํšŒ

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

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

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

findFilteredAndLimitedData();

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

3. ์ •๋ ฌ๊ณผ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ ์ œํ•œํ•˜๊ธฐ

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

// ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ ์ƒ์œ„ 5๋ช…์˜ ์‚ฌ์šฉ์ž ์กฐํšŒ

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

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

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

findSortedAndLimitedData();

์œ„ ์ฝ”๋“œ๋Š” ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ ํ›„ ์ƒ์œ„ 5๋ช…์˜ ์‚ฌ์šฉ์ž๋งŒ ์กฐํšŒํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. sort()์™€ limit() ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ ์ค‘ ์ผ๋ถ€๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ตฌํ˜„: limit()์™€ skip()

limit() ๋ฉ”์„œ๋“œ๋Š” ํŽ˜์ด์ง€๋„ค์ด์…˜(pagination)์„ ๊ตฌํ˜„ํ•  ๋•Œ๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋„ค์ด์…˜์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋กœ ๋‚˜๋ˆ„์–ด ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ํŽ˜์ด์ง€์— 5๋ช…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด skip() ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ตฌํ˜„ ์˜ˆ์‹œ

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

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

        const limit = 5; // ํ•œ ํŽ˜์ด์ง€์— 5๊ฐœ์˜ ๋ฌธ์„œ ํ‘œ์‹œ
        const skip = (page - 1) * limit; // ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

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

// ์˜ˆ์‹œ๋กœ ํŽ˜์ด์ง€ 2์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
findPaginatedData(2);

์œ„ ์ฝ”๋“œ๋Š” ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•˜์—ฌ ํŽ˜์ด์ง€ 2์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. skip() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์— ๋”ฐ๋ผ ๊ฑด๋„ˆ๋›ธ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ , limit() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ ํŽ˜์ด์ง€์— ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

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

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

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

๊ฒฐ๋ก 

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

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