Responsive Advertisement

Node.js에서 MongoDB 조인하기: Lookup 메서드 사용 가이드

MongoDB는 관계형 데이터베이스의 JOIN과 같은 기능을 $lookup 메서드를 통해 지원합니다. $lookup은 한 컬렉션의 데이터를 다른 컬렉션과 결합할 때 사용되며, 이를 통해 여러 컬렉션 간의 데이터를 조합할 수 있습니다. 이번 글에서는 Node.jsMongoDB를 연동하여 $lookup 메서드를 사용해 데이터를 조인하는 방법을 설명하겠습니다.

MongoDB의 $lookup 메서드란?

MongoDB에서 $lookup은 두 개의 컬렉션을 조합하여 하나의 결과를 생성하는 메서드입니다. 이는 관계형 데이터베이스의 JOIN과 유사한 역할을 하며, 주로 aggregate 파이프라인에서 사용됩니다. $lookup은 기본적으로 한 컬렉션의 필드를 다른 컬렉션의 필드와 매칭하여 데이터를 결합합니다.

$lookup 기본 구조

MongoDB의 $lookup 기본 구조는 다음과 같습니다:

{
  $lookup: {
    from: 'target_collection',        // 조인할 컬렉션의 이름
    localField: 'current_field',      // 현재 컬렉션에서 참조할 필드
    foreignField: 'target_field',     // 다른 컬렉션에서 일치할 필드
    as: 'result_field'                // 결합된 결과를 저장할 필드 이름
  }
}

이 구조는 다음과 같은 방식으로 작동합니다:

  • from: 다른 컬렉션의 이름을 지정합니다.
  • localField: 현재 컬렉션의 필드 중 조인에 사용할 필드를 지정합니다.
  • foreignField: 다른 컬렉션에서 일치시킬 필드를 지정합니다.
  • as: 조인된 결과가 저장될 새로운 필드의 이름을 지정합니다.

Node.js와 MongoDB 연동하기

MongoDB에서 $lookup을 사용하여 데이터를 조합하려면 먼저 Node.js와 MongoDB를 연동해야 합니다. mongodb 패키지를 사용하여 연결을 설정하는 방법을 설명하겠습니다.

1. Node.js 프로젝트 설정

MongoDB와 Node.js를 연결하기 위해, 먼저 Node.js 프로젝트를 초기화하고 필요한 패키지를 설치합니다.

$ 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에서 $lookup을 사용하여 데이터를 조합하는 방법을 살펴보겠습니다.

MongoDB에서 컬렉션 조인하기: $lookup 사용법

MongoDB에서 $lookup을 사용하여 두 개 이상의 컬렉션을 결합하는 방법을 알아보겠습니다. 예를 들어, users 컬렉션과 orders 컬렉션을 조합하여 각 사용자와 그들이 주문한 상품 정보를 결합할 수 있습니다.

1. $lookup을 사용한 기본 조인

다음 코드는 users 컬렉션과 orders 컬렉션을 조합하여 사용자와 그들의 주문 정보를 가져오는 예시입니다.

// users와 orders 컬렉션 조인 예시

async function joinUsersAndOrders() {
    try {
        await client.connect();
        console.log('MongoDB에 성공적으로 연결되었습니다.');

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

        // users 컬렉션과 orders 컬렉션을 조합
        const results = await usersCollection.aggregate([
            {
                $lookup: {
                    from: 'orders',           // 조인할 컬렉션 이름
                    localField: '_id',        // users 컬렉션의 필드
                    foreignField: 'user_id',  // orders 컬렉션에서 매칭할 필드
                    as: 'user_orders'         // 결과가 저장될 필드
                }
            }
        ]).toArray();

        console.log('조인된 결과:', results);
    } catch (error) {
        console.error('데이터 조인 중 오류 발생:', error);
    } finally {
        await client.close();
        console.log('MongoDB 연결이 종료되었습니다.');
    }
}

joinUsersAndOrders();

위 코드는 users 컬렉션에서 _id 필드를 기준으로 orders 컬렉션의 user_id 필드와 조합하여 사용자의 주문 정보를 결합하는 예시입니다. 결과는 user_orders 필드에 저장됩니다.

2. 여러 컬렉션 조인

여러 컬렉션을 동시에 조인하여 더 복잡한 쿼리를 만들 수 있습니다. 예를 들어, products 컬렉션까지 함께 조합하여 각 사용자가 주문한 제품의 세부 정보를 포함하는 예시는 다음과 같습니다.

// users, orders, products 컬렉션을 조인하는 예시

async function joinUsersOrdersAndProducts() {
    try {
        await client.connect();
        console.log('MongoDB에 성공적으로 연결되었습니다.');

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

        const results = await usersCollection.aggregate([
            {
                $lookup: {
                    from: 'orders',            // 첫 번째 조인
                    localField: '_id',
                    foreignField: 'user_id',
                    as: 'user_orders'
                }
            },
            {
                $lookup: {
                    from: 'products',          // 두 번째 조인
                    localField: 'user_orders.product_id',
                    foreignField: '_id',
                    as: 'order_products'
                }
            }
        ]).toArray();

        console.log('조인된 결과:', results);
    } catch (error) {
        console.error('데이터 조인 중 오류 발생:', error);
    } finally {
        await client.close();
        console.log('MongoDB 연결이 종료되었습니다.');
    }
}

joinUsersOrdersAndProducts();

이 코드는 users, orders, products 세 개의 컬렉션을 조합하는 예시입니다. $lookup을 여러 번 사용하여 각 사용자의 주문 정보와 제품 세부 정보를 함께 가져옵니다.

MongoDB 연결 종료

모든 데이터 작업이 끝나면 MongoDB 연결을 안전하게 종료해야 합니다. client.close() 메서드를 사용하여 연결을 종료할 수 있습니다.

// MongoDB 연결 종료
await client.close();
console.log('MongoDB 연결이 종료되었습니다.');

결론

이번 글에서는 Node.js와 MongoDB를 사용하여 $lookup 메서드로 컬렉션을 조인하는 방법을 살펴보았습니다. MongoDB의 $lookup은 여러 컬렉션의 데이터를 결합하여 복잡한 쿼리를 작성하는 데 매우 유용합니다. 이 가이드를 통해 MongoDB에서 효율적으로 데이터를 조합하고 다양한 응용 프로그램을 개발할 수 있습니다!

댓글 쓰기