[MongoDB] 랜덤 데이터 가져오는 API 만들기

KUKJIN LEE's profile picture

KUKJIN LEE2개월 전 작성

$sample 연산자를 사용하면 데이터베이스에서 무작위 데이터를 쉽게 가져올 수 있습니다.

 

1. Next.js에서 MongoDB 연동하기

먼저, MongoDB 클러스터와 Next.js를 연결해야 합니다.

 

1.1 MongoDB 클라이언트 설정 (lib/mongodb.ts)

MongoDB와의 연결을 효율적으로 관리하기 위해 별도의 파일을 생성하여 클라이언트를 설정합니다.

import { MongoClient } from 'mongodb';

const uri = process.env.MONGODB_URI; // 환경 변수에서 MongoDB 연결 URI 가져오기
const options = {};

let client;
let clientPromise: Promise<MongoClient>;

if (!process.env.MONGODB_URI) {
  throw new Error('Please add your Mongo URI to .env.local');
}

if (process.env.NODE_ENV === 'development') {
  // 개발 환경에서는 전역 클라이언트 인스턴스를 사용합니다.
  if (!global._mongoClientPromise) {
    client = new MongoClient(uri, options);
    global._mongoClientPromise = client.connect();
  }
  clientPromise = global._mongoClientPromise;
} else {
  // 프로덕션에서는 새로운 클라이언트를 생성합니다.
  client = new MongoClient(uri, options);
  clientPromise = client.connect();
}

export default clientPromise;

2. MongoDB $sample 연산자를 사용해 랜덤 데이터 가져오기

MongoDB에서 랜덤 데이터를 가져오기 위해서는 $sample 연산자를 사용할 수 있습니다. $sample은 지정된 size수만큼 무작위로 문서를 선택하는 Aggregation 연산자입니다.

db.collection('kakao').aggregate([{ $sample: { size: 6 } }])

 

3. 실제 예시

아래 예시는 kakao 라는 collection에서 size가 6, 즉 6개의 데이터를 랜덤으로 가져오는 API입니다.

import { NextResponse } from 'next/server';
import clientPromise from '@/lib/mongodb';

export async function GET() {
  try {
    const client = await clientPromise; // MongoDB 클라이언트 연결
    const db = client.db(); // 데이터베이스 가져오기
    const collection = db.collection('kakao'); // 'kakao' 컬렉션 사용

    // Aggregation으로 랜덤 6개의 데이터 가져오기
    const randomData = await collection.aggregate([{ $sample: { size: 6 } }]).toArray();

    return NextResponse.json({ success: true, data: randomData }); // 성공적으로 데이터를 반환
  } catch (error) {
    return NextResponse.json({ success: false, error: error.message }); // 에러 처리
  }
}

MongoDB의 Aggregation 프레임워크는 대규모 데이터에서 랜덤 데이터를 쉽게 선택할 수 있습니다.

New Tech Posts