MongoDB는 NoSQL 기반의 데이터베이스로, 데이터를 유연하게 관리하고 쿼리할 수 있습니다. MongoDB에서 쿼리는 데이터베이스에서 특정 데이터를 검색하거나 필터링하는 데 사용됩니다. 이번 글에서는 Node.js와 MongoDB를 연동하여 쿼리(Query)를 실행하고 데이터를 효율적으로 조회하는 방법을 알아보겠습니다.
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
객체를 사용하여 Node.js와 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에서 쿼리를 실행할 준비가 되었습니다.
MongoDB에서 쿼리(Query) 실행하기
MongoDB에서 데이터를 조회하거나 특정 조건에 맞는 데이터를 검색할 때 쿼리(Query)를 사용합니다. 쿼리는 컬렉션에서 특정 데이터를 검색하기 위한 조건을 설정할 수 있으며, find()
메서드와 함께 사용됩니다.
1. 모든 데이터 조회하기
MongoDB에서 가장 기본적인 쿼리는 컬렉션의 모든 데이터를 조회하는 것입니다. find()
메서드에 조건 없이 호출하면 컬렉션의 모든 데이터를 조회할 수 있습니다.
// 모든 데이터 조회 예시
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()
메서드를 사용하여 조건 없이 모든 데이터를 배열로 변환하여 조회할 수 있습니다.
2. 특정 조건으로 데이터 조회하기
특정 조건에 맞는 데이터를 조회하려면 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();
위 코드는 나이가 30 이상인 사용자만 조회하는 쿼리입니다. MongoDB는 $gte
같은 조건 연산자를 사용해 특정 필터링을 적용할 수 있습니다.
3. 여러 조건으로 데이터 조회하기
여러 조건을 결합하여 데이터를 조회할 수 있습니다. 예를 들어, 나이가 25세 이상이면서 이름이 'John'인 사용자를 조회하려면 다음과 같이 작성할 수 있습니다.
// 여러 조건으로 데이터 조회 예시
async function findMultipleConditions() {
try {
await client.connect();
console.log('MongoDB에 성공적으로 연결되었습니다.');
const db = client.db(dbName);
const collection = db.collection('users');
// 나이가 25 이상이고, 이름이 'John'인 사용자 조회
const users = await collection.find({ age: { $gte: 25 }, name: 'John' }).toArray();
console.log('조건에 맞는 사용자:', users);
} catch (error) {
console.error('데이터 조회 중 오류 발생:', error);
} finally {
await client.close();
console.log('MongoDB 연결이 종료되었습니다.');
}
}
findMultipleConditions();
위 코드는 두 가지 조건을 결합한 쿼리로, 나이가 25 이상이면서 이름이 'John'인 사용자만 조회합니다.
4. 논리 연산자 사용하기
MongoDB 쿼리에서는 논리 연산자를 사용할 수 있습니다. 예를 들어, $or
연산자를 사용하여 나이가 25 이상이거나 이름이 'Alice'인 사용자를 조회하려면 다음과 같이 작성합니다.
// 논리 연산자 사용 예시
async function findWithLogicalOperators() {
try {
await client.connect();
console.log('MongoDB에 성공적으로 연결되었습니다.');
const db = client.db(dbName);
const collection = db.collection('users');
// 나이가 25 이상이거나 이름이 'Alice'인 사용자 조회
const users = await collection.find({
$or: [{ age: { $gte: 25 } }, { name: 'Alice' }]
}).toArray();
console.log('조건에 맞는 사용자:', users);
} catch (error) {
console.error('데이터 조회 중 오류 발생:', error);
} finally {
await client.close();
console.log('MongoDB 연결이 종료되었습니다.');
}
}
findWithLogicalOperators();
위 코드는 논리 연산자 $or
를 사용하여 두 조건 중 하나라도 만족하는 데이터를 조회하는 예시입니다.
5. 필드 포함 및 제외: projection
사용하기
특정 필드만 조회하거나 제외하고 싶을 때는 projection
을 사용할 수 있습니다. 예를 들어, 이름과 나이만 조회하고 _id
필드는 제외하는 쿼리는 다음과 같습니다.
// projection 사용 예시
async function findWithProjection() {
try {
await client.connect();
console.log('MongoDB에 성공적으로 연결되었습니다.');
const db = client.db(dbName);
const collection = db.collection('users');
// 사용자 이름과 나이만 조회, _id 제외
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 연결이 종료되었습니다.');
}
}
findWithProjection();
위 코드는 projection
을 사용하여 name
과 age
만 반환하고, _id
필드는 제외하는 쿼리입니다.
6. 정렬 및 제한: sort()
와 limit()
쿼리 결과를 정렬하거나 조회할 데이터 개수를 제한하고 싶을 때는 sort()
와 limit()
를 사용할 수 있습니다. 예를 들어, 나이 순으로 정렬하고 상위 3명의 사용자만 조회하려면 다음과 같이 작성합니다.
// 정렬 및 제한 사용 예시
async function findSortedAndLimited() {
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 연결이 종료되었습니다.');
}
}
findSortedAndLimited();
위 코드는 나이를 기준으로 오름차순 정렬한 후 상위 3명의 사용자만 조회하는 쿼리입니다.
MongoDB 연결 종료
데이터 조회 작업이 끝나면 MongoDB 연결을 안전하게 종료해야 합니다. client.close()
메서드를 사용해 MongoDB 연결을 종료할 수 있습니다.
// MongoDB 연결 종료
await client.close();
console.log('MongoDB 연결이 종료되었습니다.');
결론
이번 글에서는 Node.js에서 MongoDB 쿼리를 사용하여 데이터를 효율적으로 조회하는 방법을 살펴보았습니다. MongoDB의 강력한 쿼리 기능을 활용하여 다양한 조건과 논리 연산을 적용해 원하는 데이터를 조회할 수 있습니다. 이 가이드를 바탕으로 MongoDB 쿼리를 활용해 데이터를 효과적으로 관리하고, 강력한 애플리케이션을 개발해보세요!
댓글 쓰기