MongoDB에서의 CRUD 작업 이해하기
MongoDB는 JSON 기반 데이터 모델을 사용하는 NoSQL 데이터베이스로, 데이터의 저장 및 조작을 용이하게 해주는 다양한 기능을 갖추고 있습니다. 이 글에서는 MongoDB에서의 CRUD(생성, 읽기, 수정, 삭제) 작업에 대해 자세히 알아보도록 하겠습니다.

MongoDB와의 연결 설정
데이터를 조작하기 전에 MongoDB에 연결하고 작업할 데이터베이스와 컬렉션을 선택하는 과정이 필요합니다. 아래의 Java 코드는 MongoDB 클라이언트를 생성하고, 특정 데이터베이스와 컬렉션에 접근하는 방법을 보여줍니다.
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); MongoDatabase database = mongoClient.getDatabase("exampleDb"); MongoCollectioncollection = database.getCollection("sampleCollection");
Spring Data MongoDB를 활용한 접근
Spring 프레임워크를 사용하는 경우, MongoTemplate
클래스를 통해 MongoDB에 쉽게 접근할 수 있습니다. 다음은 MongoTemplate
설정과 기본적인 컬렉션 접근 방법을 나타냅니다.
@Autowired private MongoTemplate mongoTemplate;
MongoDB에서의 CRUD 작업
이제 MongoDB에서 CRUD 작업을 수행하는 다양한 방법을 살펴보겠습니다.

데이터 삽입 (Insert)
MongoDB에서는 단일 문서 또는 여러 문서를 한 번에 삽입할 수 있습니다. 아래의 예제는 각각의 경우를 보여줍니다.
// 단일 문서 삽입 MyDto document = new MyDto("Alice", 25, "Seoul"); mongoTemplate.insert(document, "sampleCollection"); // 다중 문서 삽입 Listdocuments = Arrays.asList( new MyDto("Bob", 30, "Busan"), new MyDto("Charlie", 35, "Incheon") ); mongoTemplate.insert(documents, "sampleCollection");
데이터 조회 (Read)
MongoDB에서 요구하는 조건에 부합하는 데이터를 조회할 때는 Query
와 Criteria
를 사용하여 필터를 설정합니다. 예를 들어, 나이가 25세 이상인 데이터를 찾고자 할 때는 다음과 같은 코드를 사용합니다.
// age가 25 이상인 데이터를 조회 Query query = new Query(Criteria.where("age").gte(25)); Listresults = mongoTemplate.find(query, MyDto.class, "sampleCollection");
데이터 수정 (Update)
기존 데이터를 수정하기 위해서는 updateFirst()
또는 updateMulti()
메서드를 활용할 수 있습니다. 아래는 특정 조건에 맞는 문서의 특정 필드를 업데이트하는 방법입니다.
Query query = new Query(Criteria.where("name").is("Alice")); Update update = new Update().set("age", 26); mongoTemplate.updateFirst(query, update, "sampleCollection");
데이터 삭제 (Delete)
조건부로 문서를 삭제할 때는 remove()
메서드를 사용합니다. 다음은 이름이 “Charlie”인 문서를 삭제하는 예제입니다.
Query query = new Query(Criteria.where("name").is("Charlie")); mongoTemplate.remove(query, MyDto.class, "sampleCollection");
복합 조건 활용하기 (AND, OR)
여러 조건을 결합하여 데이터를 조회하고자 할 때는 Criteria
의 andOperator
와 orOperator
를 사용할 수 있습니다. 예를 들어, 나이가 25세 이상이면서 거주지가 “Seoul”인 데이터는 다음과 같이 조회할 수 있습니다.
Query query = new Query( new Criteria().andOperator( Criteria.where("age").gte(25), Criteria.where("city").is("Seoul") ) ); Listresults = mongoTemplate.find(query, MyDto.class, "sampleCollection");
정렬 및 결과 제한
조회한 데이터의 정렬을 원할 경우, with()
메서드를 활용하여 특정 필드를 기준으로 정렬할 수 있으며, limit()
메서드를 통해 반환할 문서 수를 제한할 수 있습니다. 예를 들어, 나이를 기준으로 내림차순 정렬하여 상위 5개의 문서를 얻고자 할 때는 다음과 같이 작성합니다.
Query query = new Query() .with(Sort.by(Sort.Direction.DESC, "age")) // age 기준 내림차순 정렬 .limit(5); // 상위 5개 문서만 반환 Listresults = mongoTemplate.find(query, MyDto.class, "sampleCollection");
집계 쿼리 (Aggregation)
Spring Data MongoDB의 집계 기능을 사용하면 다양한 집계 작업을 수행할 수 있습니다. 예를 들어, 각 도시(city)별 평균 나이(age)를 계산하는 집계 쿼리는 다음과 같이 작성할 수 있습니다.
Aggregation aggregation = Aggregation.newAggregation( Aggregation.group("city").avg("age").as("averageAge") ); AggregationResultsresults = mongoTemplate.aggregate( aggregation, "sampleCollection", Document.class ); for (Document doc : results) { System.out.println(doc.toJson()); }

마치며
MongoDB는 CRUD 작업을 수행하는 데 필요한 다양한 기능을 제공합니다. 본 글에서는 데이터의 삽입, 조회, 수정, 삭제를 포함한 기본적인 CRUD 작업과 함께 조건 조합, 정렬, 집계 기능에 대해서도 설명하였습니다. 이러한 기본적인 작업을 통해 MongoDB에서의 데이터 관리가 한층 수월해질 것을 기대합니다.
자주 묻는 질문 FAQ
MongoDB에서 데이터를 삽입하는 방법은 무엇인가요?
MongoDB에 새로운 데이터를 추가하려면, 단일 문서 또는 여러 문서를 한 번에 삽입할 수 있습니다. 예를 들어, insert
메서드를 사용해 원하는 컬렉션에 데이터를 추가하는 방식으로 진행할 수 있습니다.
데이터 수정은 어떻게 하나요?
기존 데이터를 변경하기 위해서는 특정 조건을 만족하는 문서를 찾아 updateFirst
또는 updateMulti
메서드를 활용할 수 있습니다. 이를 통해 필요에 따라 원하는 필드의 값을 업데이트할 수 있습니다.