Node.js에서 몽고DB를 작동하기 위한 일반적인 라이브러리는 mongodb 네이티브 드라이버와 몽구스입니다. 이 글에서는 예제를 위해 mongodb 공식 드라이버 패키지를 사용하겠습니다. 시작하려면 먼저 MongoDB 데이터베이스를 설치하고 로컬에서 MongoDB 서비스를 시작했는지 확인합니다.
먼저 몽고DB 드라이버를 설치해야 합니다:
npm install mongodb
다음으로 MongoDB에 연결하는 클라이언트를 만들 수 있습니다:
const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017'; // MongoDB서비스 위치
const dbName = 'mydatabase'; // 데이터베이스 이름
const client = new MongoClient(url);
async function main() {
await client.connect();
console.log('Connected successfully to server');
const db = client.db(dbName);
// 여기서 CRUD 작업을 수행하기 위해 대기 중입니다.
client.close();
}
main().catch(console.error);
기본 에디션
생성
단일 데이터 삽입
async function createDocument(collectionName, doc) {
const collection = db.collection(collectionName);
const result = await collection.insertOne(doc);
console.log(result);
}
// 사용 예시
createDocument('users', { name: 'Tom', age: 25 });
여러 데이터 삽입
async function createMultipleDocuments(collectionName, docs) {
const collection = db.collection(collectionName);
const result = await collection.insertMany(docs);
console.log(result);
}
// 사용 예시
createMultipleDocuments('users', [
{ name: 'Alice', age: 23 },
{ name: 'Bob', age: 27 }
]);
읽기
단일 데이터 쿼리하기
async function findOneDocument(collectionName, query) {
const collection = db.collection(collectionName);
const doc = await collection.findOne(query);
console.log(doc);
}
// 사용 예시
findOneDocument('users', { name: 'Tom' });
여러 데이터 쿼리
async function findMultipleDocuments(collectionName, query) {
const collection = db.collection(collectionName);
const docs = await collection.find(query).toArray();
console.log(docs);
}
// 사용 예시
findMultipleDocuments('users', { age: { $gt: 20 } });
업데이트
단일 데이터 업데이트
async function updateOneDocument(collectionName, filter, updateDoc) {
const collection = db.collection(collectionName);
const result = await collection.updateOne(filter, { $set: updateDoc });
console.log(result);
}
// 사용 예시
updateOneDocument('users', { name: 'Tom' }, { age: 28 });
여러 데이터 업데이트
async function updateMultipleDocuments(collectionName, filter, updateDoc) {
const collection = db.collection(collectionName);
const result = await collection.updateMany(filter, { $set: updateDoc });
console.log(result);
}
// 사용 예시
updateMultipleDocuments('users', { age: { $lt: 30 } }, { active: true });
삭제
단일 데이터 삭제
async function deleteOneDocument(collectionName, query) {
const collection = db.collection(collectionName);
const result = await collection.deleteOne(query);
console.log(result);
}
// 사용 예시
deleteOneDocument('users', { name: 'Tom' });
여러 데이터 삭제
async function deleteMultipleDocuments(collectionName, query) {
const collection = db.collection(collectionName);
const result = await collection.deleteMany(query);
console.log(result);
}
// 사용 예시
deleteMultipleDocuments('users', { active: true });
위의 작업을 완료한 후에는 데이터베이스 연결을 닫아야 합니다.
client.close();
위 코드를 사용할 때는 컬렉션 이름, 쿼리 및 업데이트 문서 값을 실제 필요에 맞게 변경하여 사용하세요.
이 가이드는 Node.js에서 MongoDB를 사용한 기본 CRUD 작업에 대한 코드 예제를 다룹니다. 실제 애플리케이션 개발에서는 실제 비즈니스 로직에 따라 더 복잡한 연산과 캡슐화를 수행해야 할 수도 있습니다.
MongoDB에서 고급 쿼리 및 수정 작업을 수행하려면 일반적으로 더 복잡한 쿼리 조건, 집계 작업, 업데이트 작업에 대한 신중한 제어가 필요합니다. 여기에서는 몇 가지 고급 사용 예제를 제공하겠습니다.
고급 에디션
고급 쿼리
쿼리는 $and, $or, $in, $not, $type, $regex 등과 같은 보다 복잡한 연산자를 사용하여 복잡한 쿼리문을 작성할 수 있습니다.
논리 연산자 사용
async function findWithLogicalOperators(collectionName) {
const collection = db.collection(collectionName);
// 이름이 'A'로 시작하는 20세 이상의 사용자를 쿼리하는 경우
const query = { $and: [{ age: { $gt: 20 } }, { name: { $regex: /^A/ } }] };
const docs = await collection.find(query).toArray();
console.log(docs);
}
findWithLogicalOperators('users');
배열 쿼리 사용
async function findUsersWithSpecificInterests(collectionName) {
const collection = db.collection(collectionName);
// 쿼리에 관심이 있는 사용자가
const query = { interests: "더 읽기"};
const docs = await collection.find(query).toArray();
console.log(docs);
}
findUsersWithSpecificInterests('users');
집계 프레임워크 사용
몽고DB는 필드 그룹화, 정렬, 계산과 같은 보다 복잡한 데이터 처리 작업을 수행할 수 있는 집계 프레임워크를 제공합니다.
평균 연령 그룹화 및 계산
async function averageAgeByInterest(collectionName) {
const collection = db.collection(collectionName);
const pipeline = [
{ $unwind: "$interests" },
{ $group: { _id: "$interests", averageAge: { $avg: "$age" } } },
{ $sort: { averageAge: -1 } }
];
const result = await collection.aggregate(pipeline).toArray();
console.log(result);
}
averageAgeByInterest('users');
고급 업데이트
업데이트 작업에는 필드 수정, 새 필드 추가, $inc, $push 등의 업데이트 연산자 사용 등이 포함될 수 있습니다.
새 필드를 업데이트하고 동시에 추가하기
async function updateAndAddField(collectionName, userId, incrementValue) {
const collection = db.collection(collectionName);
const filter = { _id: userId };
const updateDoc = {
$set: { lastActive: new Date() },
$inc: { loginCount: incrementValue }
};
const result = await collection.updateOne(filter, updateDoc);
console.log(result);
}
updateAndAddField('users', "someUserId", 1);
배열에 요소 추가하기
async function addInterestToUser(collectionName, userId, newInterest) {
const collection = db.collection(collectionName);
const filter = { _id: userId };
const updateDoc = { $push: { interests: newInterest } };
const result = await collection.updateOne(filter, updateDoc);
console.log(result);
}
addInterestToUser('users', "someUserId", "수영");
삭제 작업
삭제 작업은 조건부 삭제도 가능하며, 조건에 따라 레코드를 일괄 삭제할 수도 있습니다.
특정 연령대 내의 사용자 삭제
async function deleteUserByAgeRange(collectionName, minAge, maxAge) {
const collection = db.collection(collectionName);
const query = { age: { $gte: minAge, $lte: maxAge } };
const result = await collection.deleteMany(query);
console.log(result);
}
deleteUserByAgeRange('users', 18, 30);
English version
Node.js에서 MongoDB를 사용한 CRUD 작업 가이드
Node.js에서 MongoDB와 상호 작용하기 위한 일반적인 라이브러리에는 네이티브 mongodb 드라이버와 mongoose 등이 있습니다. 아래에서는 데모를 위해 공식적인 mongodb 드라이버 패키지를 데모에 사용합니다. 시작하기 전에 MongoDB 데이터베이스가 설치되어 있고 MongoDB 서비스가 로컬에서 실행 중인지 확인하세요.
먼저 몽고DB 드라이버를 설치해야 합니다.
npm install mongodb
다음으로, MongoDB에 연결할 클라이언트를 만들 수 있습니다.
const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017'; // MongoDB service address
const dbName = 'mydatabase'; // Database name
const client = new MongoClient(url);
async function main() {
await client.connect();
console.log('Connected successfully to server');
const db = client.db(dbName);
// Perform CRUD operations here
client.close();
}
main().catch(console.error);
Create
Inserting a Single Document
async function createDocument(collectionName, doc) {
const collection = db.collection(collectionName);
const result = await collection.insertOne(doc);
console.log(result);
}
// Usage example
createDocument('users', { name: 'Tom', age: 25 });
Inserting Multiple Documents
async function createMultipleDocuments(collectionName, docs) {
const collection = db.collection(collectionName);
const result = await collection.insertMany(docs);
console.log(result);
}
// Usage example
createMultipleDocuments('users', [
{ name: 'Alice', age: 23 },
{ name: 'Bob', age: 27 }
]);
Read
단일 문서 쿼리하기
async function findOneDocument(collectionName, query) {
const collection = db.collection(collectionName);
const doc = await collection.findOne(query);
console.log(doc);
}
// Usage example
findOneDocument('users', { name: 'Tom' });
여러 문서 쿼리하기
async function findMultipleDocuments(collectionName, query) {
const collection = db.collection(collectionName);
const docs = await collection.find(query).toArray();
console.log(docs);
}
// Usage example
findMultipleDocuments('users', { age: { $gt: 20 } });
Update
단일 문서 업데이트
async function updateOneDocument(collectionName, filter, updateDoc) {
const collection = db.collection(collectionName);
const result = await collection.updateOne(filter, { $set: updateDoc });
console.log(result);
}
// Usage example
updateOneDocument('users', { name: 'Tom' }, { age: 28 });
여러 문서 업데이트하기
async function updateMultipleDocuments(collectionName, filter, updateDoc) {
const collection = db.collection(collectionName);
const result = await collection.updateMany(filter, {
$set: updateDoc });
console.log(result);
}
// Usage example
updateMultipleDocuments('users', { age: { $lt: 30 } }, { active: true });
Delete
단일 문서 삭제하기
async function deleteOneDocument(collectionName, query) {
const collection = db.collection(collectionName);
const result = await collection.deleteOne(query);
console.log(result);
}
// Usage example
deleteOneDocument('users', { name: 'Tom' });
여러 문서 삭제하기
async function deleteMultipleDocuments(collectionName, query) {
const collection = db.collection(collectionName);
const result = await collection.deleteMany(query);
console.log(result);
}
// Usage example
deleteMultipleDocuments('users', { active: true });
위의 작업을 완료한 후에는 데이터베이스 연결을 닫아야 합니다.
client.close();
위 코드를 사용할 때는 컬렉션 이름, 쿼리 및 업데이트 문서를 실제 필요에 맞는 값으로 대체하여 수정하세요.
"이" 가이드는 Node.js에서 MongoDB를 사용하는 기본 CRUD 작업 코드 예제를 다룹니다. 실제 애플리케이션 개발 시에는 실제 비즈니스 로직에 따라 더 복잡한 연산과 캡슐화를 수행해야 할 수도 있습니다.
MongoDB에서 고급 쿼리 및 수정을 수행하려면 더 복잡한 쿼리 조건, 집계 작업 및 세부 제어가 필요한 경우가 많습니다. 다음은 몇 가지 고급 사용 예제입니다.
Advanced Queries
쿼리는 $and, $or, $in, $not, $type, $regex 등과 같은 보다 복잡한 연산자를 사용하여 복잡한 쿼리문을 작성할 수 있습니다.
Using Logical Operators
async function findWithLogicalOperators(collectionName) {
const collection = db.collection(collectionName);
// Query users older than 20 and whose name starts with 'A'
const query = { $and: [{ age: { $gt: 20 } }, { name: { $regex: /^A/ } }] };
const docs = await collection.find(query).toArray();
console.log(docs);
}
findWithLogicalOperators('users');
Using Array Queries
async function findUsersWithSpecificInterests(collectionName) {
const collection = db.collection(collectionName);
// Query users with interest in reading
const query = { interests: "Reading" };
const docs = await collection.find(query).toArray();
console.log(docs);
}
findUsersWithSpecificInterests('users');
집계 프레임워크 사용
몽고DB의 집계 프레임워크는 그룹화, 정렬, 필드 계산 등과 같은 보다 복잡한 데이터 처리 작업을 수행할 수 있으며, 다양한 소스의 데이터를 집계하는 도구로도 사용할 수 있습니다.
평균 연령 그룹화 및 계산
async function averageAgeByInterest(collectionName) {
const collection = db.collection(collectionName);
const pipeline = [
{ $unwind: "$interests" },
{ $group: { _id: "$interests", averageAge: { $avg: "$age" } } },
{ $sort: { averageAge: -1 } }
];
const result = await collection.aggregate(pipeline).toArray();
console.log(result);
}
averageAgeByInterest('users');
Advanced Updates
업데이트 작업에는 필드 수정, '새' 필드 추가, $inc, $push 등과 같은 업데이트 연산자 사용이 포함될 수 있습니다.
'새' 필드 업데이트 및 추가하기
async function updateAndAddField(collectionName, userId, incrementValue) {
const collection = db.collection(collectionName);
const filter = { _id: userId };
const updateDoc = {
$set: { lastActive: new Date() },
$inc: { loginCount: incrementValue }
};
const result = await collection.updateOne(filter, updateDoc);
console.log(result);
}
updateAndAddField('users', "someUserId", 1);
배열에 엘리먼트 추가하기
async function addInterestToUser(collectionName, userId, newInterest) {
const collection = db.collection(collectionName);
const filter = { _id: userId };
const updateDoc = { $push: { interests: newInterest } };
const result = await collection.updateOne(filter, updateDoc);
console.log(result);
}
addInterestToUser('users', "someUserId", "Swimming");
Delete Operations
삭제 작업은 조건부 삭제도 가능하므로 특정 조건에 따라 레코드를 대량으로 삭제할 수 있습니다.
특정 연령 범위 내의 사용자 삭제하기
async function deleteUserByAgeRange(collectionName, minAge, maxAge) {
const collection = db.collection(collectionName);
const query = { age: { $gte: minAge, $lte: maxAge } };
const result = await collection.deleteMany(query);
console.log(result);
}
deleteUserByAgeRange('users', 18, 30);
위의 내용은 MongoDB의 고급 기능 중 일부에 불과합니다. MongoDB는 매우 강력하고 유연한 쿼리 및 처리 기능을 가지고 있으며, 다음과 같은 이점을 얻을 수 있습니다. MongoDB는 매우 강력하고 유연한 쿼리 및 처리 기능을 가지고 있으며, MongoDB의 공식 문서를 읽으면 보다 포괄적인 이해를 얻을 수 있습니다. 이러한 고급 쿼리 및 업데이트 작업은 다음과 같은 경우에 매우 유용합니다. 이러한 고급 쿼리 및 업데이트 작업은 애플리케이션에서 복잡한 데이터 모델과 고급 데이터 작업을 처리해야 할 때 매우 유용합니다.




