👋 Hello, I am Seung-ho Ham

🧑🏻‍💻 A Developers who create code that changes the world

Development/NoSQL

MongoDB CRUD와 문법

Potato_H 2024. 8. 27. 16:34
반응형

MongoDB에서의 CRUD(Create, Read, Update, Delete) 작업은 데이터베이스에서 데이터를 삽입하고, 조회하고, 수정하고, 삭제하는 기본적인 작업을 말합니다.

1. Document 입력 - insertOne, insertMany

  • insertOne: 한 개의 document(문서)를 생성합니다.
  • insertMany: 여러 개의 document를 한 번에 생성합니다.
// 하나의 문서를 추가 (insertOne)
db.test_2.insertOne(
    { title: "MongoDB Guide", author: "Jane Doe", views: 100 }
)

// 여러 개의 문서를 추가 (insertMany)
db.test_2.insertMany([
    { title: "Python Tutorial", author: "John Smith", views: 150 },
    { title: "JavaScript Basics", author: "Sara Lee", views: 200 },
    { title: "Node.js in Action", author: "Mike Brown", views: 250 }
])

 

2. Document 읽기(검색) - findOne, find

  • findOne: 조건에 맞는 한 개의 document를 검색합니다.
  • find: 조건에 맞는 여러 개의 document를 검색합니다.
// 하나의 문서를 검색 (findOne)
db.test_2.findOne({ title: "MongoDB Guide" })

// 조건에 맞는 모든 문서를 검색 (find)
db.test_2.find({ views: { $gte: 150 } })

// 특정 필드만 출력 (projection)
db.test_2.find({ views: { $gte: 150 } }, { title: 1, author: 1, _id: 0 })

 

3. Document 수정 - updateOne, updateMany

  • updateOne: 조건에 맞는 한 개의 document를 업데이트합니다.
  • updateMany: 조건에 맞는 여러 개의 document를 업데이트합니다.
// 한 개의 문서를 업데이트 (updateOne)
db.test_2.updateOne({ title: "MongoDB Guide" }, { $set: { views: 120 } })

// 조건에 맞는 여러 문서를 업데이트 (updateMany)
db.test_2.updateMany({ author: "John Smith" }, { $set: { author: "Jonathan Smith" } })

 

4. Document 삭제 - deleteOne, deleteMany

  • deleteOne: 조건에 맞는 한 개의 document를 삭제합니다.
  • deleteMany: 조건에 맞는 여러 개의 document를 삭제합니다.
// 한 개의 문서를 삭제 (deleteOne)
db.test_2.deleteOne({ title: "Node.js in Action" })

// 조건에 맞는 여러 문서를 삭제 (deleteMany)
db.test_2.deleteMany({ views: { $lt: 150 } })

 

 

MongoDB의 다양한 문법

정규 표현식 ($regex)

db.test_2.find({ name: { $regex: /^b/ } })      // name이 'b'로 시작하는 문서들을 조회하는 방법
db.test_2.find({ name: { $regex: /apple$/ } })  // name이 'apple'로 끝나는 문서들을 조회하는 방법

정렬  (.sort())

db.test_2.find().sort({ stock: 1 })             // stock 필드를 기준으로 오름차순 정렬하는 방법
db.test_2.find().sort({ name: -1 })             // name 필드를 기준으로 내림차순 정렬하는 방법

문서 개수 세기 (.countDocuments(), .estimatedDocumentCount())

db.test_2.countDocuments({ category: "fruit" }) // 특정 조건(category가 "fruit")을 만족하는 문서의 개수를 세는 방법
db.test_2.estimatedDocumentCount()              // 컬렉션 내 전체 문서의 개수를 추정하는 방법

필드 존재 여부 확인 ($exists)

db.test_2.find({ price: { $exists: true } })    // 특정 필드(price)가 존재하는 문서들을 조회하는 방법
db.test_2.find({ discount: { $exists: false } }) // 특정 필드(discount)가 존재하지 않는 문서들을 조회하는 방법

중복 제거 (.distinct())

db.test_2.distinct("category")                  // 특정 필드(category)의 중복을 제거하고 고유한 값을 조회하는 방법

리미티드와 스킵 (.limit(), .skip())

db.test_2.find().limit(5)                       // 조회 결과에서 처음 5개의 문서만 가져오는 방법
db.test_2.find().skip(2)                        // 조회 결과에서 처음 2개의 문서를 건너뛰고 가져오는 방법

집계 (.aggregate())

db.test_2.aggregate([
    { $match: { category: "fruit" } },          // 특정 조건(category가 "fruit")을 만족하는 문서를 필터링하는 방법
    { $group: { _id: "$category", totalStock: { $sum: "$stock" } } }
])  // 필터링된 문서들을 그룹화하여 category별 총 stock 합계를 계산하는 방법