[MongoDB] 랜덤 데이터 가져오는 API 만들기
KUKJIN LEE • 3주 전 작성
$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 프레임워크는 대규모 데이터에서 랜덤 데이터를 쉽게 선택할 수 있습니다.