Responsive Advertisement

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

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

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

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

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

MongoDB๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ MongoDB Atlas์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์— MongoDB๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด, Node.js ํ”„๋กœ์ ํŠธ์—์„œ MongoDB์™€ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก 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();

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

MongoDB์—์„œ ๋ฐ์ดํ„ฐ ์ •๋ ฌํ•˜๊ธฐ: sort() ๋ฉ”์„œ๋“œ

MongoDB์—์„œ sort() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ ฌ์€ 1๊ณผ -1๋กœ ์ง€์ •ํ•˜๋ฉฐ, 1์€ ์˜ค๋ฆ„์ฐจ์ˆœ(์ž‘์€ ๊ฐ’์—์„œ ํฐ ๊ฐ’ ์ˆœ), -1์€ ๋‚ด๋ฆผ์ฐจ์ˆœ(ํฐ ๊ฐ’์—์„œ ์ž‘์€ ๊ฐ’ ์ˆœ)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

1. ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ •๋ ฌ

๋จผ์ € users ์ปฌ๋ ‰์…˜์—์„œ ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// ๋‚˜์ด ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

async function sortByAgeAscending() {
    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 ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

sortByAgeAscending();

์œ„ ์ฝ”๋“œ๋Š” users ์ปฌ๋ ‰์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ age ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. sort({ age: 1 })์—์„œ 1์€ ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

2. ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ •๋ ฌํ•˜๊ธฐ

์ด๋ฒˆ์—๋Š” users ์ปฌ๋ ‰์…˜์—์„œ ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// ๋‚˜์ด ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

async function sortByAgeDescending() {
    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 ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

sortByAgeDescending();

์œ„ ์ฝ”๋“œ๋Š” ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. sort({ age: -1 })์—์„œ -1์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

3. ์—ฌ๋Ÿฌ ํ•„๋“œ๋กœ ๋ฐ์ดํ„ฐ ์ •๋ ฌํ•˜๊ธฐ

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

// ๋‚˜์ด ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ, ์ด๋ฆ„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

async function sortByMultipleFields() {
    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, name: -1 }).toArray();
        console.log('๋‚˜์ด ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ, ์ด๋ฆ„ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ๋œ ์‚ฌ์šฉ์ž:', users);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์ •๋ ฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

sortByMultipleFields();

์œ„ ์ฝ”๋“œ๋Š” ๋จผ์ € age๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , age ๊ฐ’์ด ๋™์ผํ•  ๊ฒฝ์šฐ name์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. sort({ age: 1, name: -1 })๋Š” ๋‘ ๊ฐ€์ง€ ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

4. ์ •๋ ฌ๊ณผ ์ œํ•œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ

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

// ๋‚˜์ด ์ˆœ์œผ๋กœ ์ƒ์œ„ 3๋ช…์˜ ์‚ฌ์šฉ์ž๋งŒ ์กฐํšŒ

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

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

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

sortAndLimit();

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

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

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

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

๊ฒฐ๋ก 

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

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