NoSQL/MongoDB

MongoDB 쿼리 사용법 가이드 (by MongoTemplate)

ghyeong 2024. 11. 10. 17:27
반응형

MongoDB는 JSON 형식의 데이터를 손쉽게 다룰 수 있는 NoSQL 데이터베이스로, CRUD 작업 및 고급 쿼리 기능을 제공합니다. 이번 글에서는 MongoDB의 데이터 삽입, 조회, 수정, 삭제 같은 기본 쿼리부터 조건 필터링, 정렬, 집계 쿼리까지 다양한 예제를 통해 MongoDB 쿼리 사용법을 알아보겠습니다.

 

기본 설정 및 컬렉션 접근

데이터 조회와 조작에 앞서, 먼저 MongoDB와 연결을 설정하고 컬렉션을 선택하는 예제입니다.

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
MongoDatabase database = mongoClient.getDatabase("exampleDb");
MongoCollection<Document> collection = database.getCollection("sampleCollection");

 

MongoTemplate을 설정하고 기본 컬렉션에 접근

import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.beans.factory.annotation.Autowired;

@Autowired
private MongoTemplate mongoTemplate;

 

 

MongoDB CRUD 작업 예제

MongoDB의 기본적인 CRUD 작업을 살펴보겠습니다.

 

데이터 삽입 (Insert)

단일 문서와 다중 문서를 컬렉션에 삽입하는 방법입니다.

// 단일 문서 삽입
MyDto document = new MyDto("Alice", 25, "Seoul");
mongoTemplate.insert(document, "sampleCollection");

// 다중 문서 삽입
List<MyDto> documents = Arrays.asList(
    new MyDto("Bob", 30, "Busan"),
    new MyDto("Charlie", 35, "Incheon")
);
mongoTemplate.insert(documents, "sampleCollection");

 

데이터 조회 (Read)

조건에 맞는 데이터를 조회할 때는 Query와 Criteria를 활용하여 필요한 필터를 작성합니다.

조건에 맞는 데이터를 조회할 때 find() 메서드를 사용합니다. 예를 들어, age가 25 이상인 데이터를 조회하려면 다음과 같이 합니다.

// age가 25 이상인 데이터를 조회
Query query = new Query(Criteria.where("age").gte(25));
List<MyDto> results = mongoTemplate.find(query, MyDto.class, "sampleCollection");

 

 

데이터 수정 (Update)

데이터 수정을 위해 updateFirst()나 updateMulti() 메서드를 사용할 수 있습니다. 예를 들어, name이 "Alice"인 문서의 age를 26으로 업데이트하는 예제입니다.

Query query = new Query(Criteria.where("name").is("Alice"));
Update update = new Update().set("age", 26);
mongoTemplate.updateFirst(query, update, "sampleCollection");

 

데이터 삭제 (Delete)

데이터 삭제 시 remove() 메서드를 사용해 조건에 맞는 문서를 제거할 수 있습니다.

Query query = new Query(Criteria.where("name").is("Charlie"));
mongoTemplate.remove(query, MyDto.class, "sampleCollection");

 

반응형

AND, OR 조건 조합

Criteria의 andOperator와 orOperator를 활용해 여러 조건을 결합할 수 있습니다. 예를 들어, age가 25 이상이고 city가 "Seoul"인 데이터를 조회할 수 있습니다.

Query query = new Query(
    new Criteria().andOperator(
        Criteria.where("age").gte(25),
        Criteria.where("city").is("Seoul")
    )
);
List<MyDto> results = mongoTemplate.find(query, MyDto.class, "sampleCollection");

 

정렬과 결과 제한

조회 결과를 특정 필드 기준으로 정렬하고, 필요한 만큼만 가져올 때는 with()와 limit()을 사용합니다.

Query query = new Query()
    .with(Sort.by(Sort.Direction.DESC, "age"))  // age 기준 내림차순 정렬
    .limit(5);                                   // 상위 5개 문서만 반환

List<MyDto> results = mongoTemplate.find(query, MyDto.class, "sampleCollection");

 

집계 쿼리 (Aggregation)

Spring Data MongoDB의 Aggregation을 사용해 다양한 집계 작업을 수행할 수 있습니다. 예를 들어, 각 city별로 평균 age를 계산하는 집계 예제입니다.

Aggregation aggregation = Aggregation.newAggregation(
    Aggregation.group("city").avg("age").as("averageAge")
);

AggregationResults<Document> results = mongoTemplate.aggregate(
    aggregation, "sampleCollection", Document.class
);

for (Document doc : results) {
    System.out.println(doc.toJson());
}

 

 

반응형