MongoDB는 대용량 데이터를 유연하게 저장하고 관리할 수 있는 NoSQL 데이터베이스입니다. 특히, 데이터를 조회할 때는 find 메서드를 사용하여 매우 효율적으로 데이터를 검색할 수 있습니다. 이번 글에서는 Node.js와 MongoDB를 연동하여 데이터를 조회하는 방법을 설명하겠습니다.
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에 연결할 수 있습니다.
// 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();
위 코드는 Node.js 애플리케이션에서 MongoDB 서버에 연결하는 과정입니다. 이제 데이터를 조회할 준비가 되었습니다.
MongoDB에서 데이터 조회하기: find()
MongoDB에서 데이터를 조회하는 기본 방법은 find()
메서드를 사용하는 것입니다. find()
는 일치하는 문서들을 검색해 배열로 반환하며, 다양한 조건을 설정하여 원하는 데이터를 조회할 수 있습니다.
1. 모든 데이터 조회: find()
컬렉션에 있는 모든 데이터를 조회하려면 조건 없이 find()
메서드를 호출하면 됩니다. 다음은 users
컬렉션의 모든 데이터를 조회하는 예시입니다.
// 모든 데이터 조회 예시
async function findAllData() {
try {
await client.connect();
console.log('MongoDB에 성공적으로 연결되었습니다.');
const db = client.db(dbName);
const collection = db.collection('users');
// 모든 사용자 조회
const users = await collection.find({}).toArray();
console.log('조회된 사용자:', users);
} catch (error) {
console.error('데이터 조회 중 오류 발생:', error);
} finally {
await client.close();
console.log('MongoDB 연결이 종료되었습니다.');
}
}
findAllData();
위 코드는 users
컬렉션의 모든 문서를 조회하는 예시입니다. find()
메서드는 MongoDB의 문서들을 검색하고, toArray()
를 사용하여 결과를 배열로 변환해 반환합니다.
2. 특정 조건으로 데이터 조회: find()
와 필터 사용
특정 조건에 맞는 데이터를 조회하려면 find()
메서드에 필터 조건을 전달할 수 있습니다. 예를 들어, 나이가 30 이상인 사용자만 조회하는 코드는 다음과 같습니다.
// 특정 조건으로 데이터 조회
async function findFilteredData() {
try {
await client.connect();
console.log('MongoDB에 성공적으로 연결되었습니다.');
const db = client.db(dbName);
const collection = db.collection('users');
// 나이가 30 이상인 사용자 조회
const users = await collection.find({ age: { $gte: 30 } }).toArray();
console.log('나이가 30 이상인 사용자:', users);
} catch (error) {
console.error('데이터 조회 중 오류 발생:', error);
} finally {
await client.close();
console.log('MongoDB 연결이 종료되었습니다.');
}
}
findFilteredData();
위 코드는 find()
메서드에 조건을 전달하여 나이가 30 이상인 사용자만 조회하는 예시입니다. MongoDB의 조건 연산자인 $gte
는 "크거나 같다"는 의미를 갖습니다.
3. 특정 필드만 조회하기: find()
와 projection 사용
특정 필드만 조회하려면 find()
메서드에서 projection을 사용할 수 있습니다. 예를 들어, 사용자 이름과 나이만 조회하려면 다음과 같이 작성할 수 있습니다.
// 특정 필드만 조회
async function findSpecificFields() {
try {
await client.connect();
console.log('MongoDB에 성공적으로 연결되었습니다.');
const db = client.db(dbName);
const collection = db.collection('users');
// 사용자 이름과 나이만 조회
const users = await collection.find({}, { projection: { name: 1, age: 1, _id: 0 } }).toArray();
console.log('조회된 사용자 (이름, 나이):', users);
} catch (error) {
console.error('데이터 조회 중 오류 발생:', error);
} finally {
await client.close();
console.log('MongoDB 연결이 종료되었습니다.');
}
}
findSpecificFields();
위 코드는 projection
을 사용하여 name
과 age
필드만 조회하고, 기본적으로 반환되는 _id
필드는 제외합니다. 1
은 필드를 포함하라는 의미이며, 0
은 제외를 의미합니다.
4. 데이터 정렬하기: sort()
데이터를 조회할 때 정렬이 필요한 경우 sort()
메서드를 사용할 수 있습니다. 예를 들어, 나이 순으로 오름차순으로 정렬하려면 다음과 같이 작성합니다.
// 데이터 정렬 예시
async function findSortedData() {
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 연결이 종료되었습니다.');
}
}
findSortedData();
위 코드는 나이 기준으로 오름차순(1)으로 정렬한 후 데이터를 조회하는 예시입니다. 내림차순으로 정렬하려면 1
대신 -1
을 사용하면 됩니다.
5. 조회 결과 제한하기: limit()
사용
많은 데이터 중 일부만 조회하려면 limit()
메서드를 사용할 수 있습니다. 예를 들어, 상위 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();
위 코드는 limit()
메서드를 사용해 상위 5개의 문서만 가져오는 예시입니다.
MongoDB 연결 종료
데이터 조회 작업이 끝난 후에는 MongoDB 연결을 안전하게 종료해야 합니다. client.close()
메서드를 사용하여 MongoDB 연결을 종료할 수 있습니다.
// MongoDB 연결 종료
await client.close();
console.log('MongoDB 연결이 종료되었습니다.');
결론
이번 글에서는 Node.js와 MongoDB를 사용하여 find()
메서드로 데이터를 조회하는 방법을 살펴보았습니다. find()
메서드는 MongoDB에서 데이터를 검색할 때 매우 강력한 도구로, 다양한 조건과 정렬, 필드 제한 기능을 통해 유연한 데이터 조회를 지원합니다. 이 가이드를 바탕으로 MongoDB에서 데이터를 효과적으로 조회하고 관리하는 애플리케이션을 개발해보세요!
댓글 쓰기