주요 애노테이션
@Document
클래스를 MongoDB 컬렉션에 매핑하며 컬렉션 이름을 지정합니다.
@Id / @MongoId
_id 필드 매핑에 사용되며 String 또는 ObjectId 타입을 지원합니다. 미사용 시 'id' 필드가 자동 매핑됩니다.
@Indexed
쿼리 성능 향상을 위한 필드 인덱싱을 선언합니다.
@Field
Java 필드명과 컬렉션 필드명이 상이할 때 매핑 조정에 활용됩니다.
@Transient
해당 필드의 데이터베이스 영속화를 방지합니다.
@DBRef
다른 컬렉션과의 참조 관계를 설정합니다(단, 캐스케이드 저장 미지원).
<code>@Data
@Document("user_data")
public class UserEntity {
@Id
private String recordId;
@Indexed
private Integer accountStatus;
@Field("registration_time")
private Long regTimestamp;
@Transient
private String nonPersistentField;
@DBRef
private List<ExternalService> linkedServices;
}</code>
CRUD 연산 메서드
삽입: insert()는 배치 삽입에 효율적이며 중복 키 예외를 발생시킵니다. save()는 존재하는 데이터를 업데이트합니다.
삭제: remove() 또는 findAndRemove()로 엔티티/조건 기반 삭제
조회: find(), findOne(), findById(), findAll() 활용
갱신: updateFirst() 단일 문서 갱신, update() 다중 문서 갱신
<code>// 삽입
mongoTemplate.insert(UserEntity.class);
mongoTemplate.save(new UserEntity());
// 갱신
mongoTemplate.updateFirst(
Query.query(Criteria.where("status").is(1)),
Update.update("role", "admin"),
UserEntity.class
);
// 삭제
mongoTemplate.remove(Query.query(Criteria.where("inactive").is(true)), UserEntity.class);
// 조회
mongoTemplate.find(Query.query(Criteria.where("department").is("IT")), UserEntity.class);</code>
쿼리 구성 기법
Criteria로 조건을 정의하고 Query 객체에 적용합니다:
<code>// 정확한 값 매칭
Criteria condition = Criteria.where("email").is("user@domain.com");
// 정규식 패턴 검색
Pattern emailPattern = Pattern.compile(".*@domain\\.com$");
condition.and("email").regex(emailPattern);
// 날짜 범위 쿼리
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
condition.and("joinDate").gt(dateFormat.parse("2023-01-01"))
.lte(dateFormat.parse("2023-12-31"));
// OR 조건 구성
Criteria orCondition = new Criteria().orOperator(
Criteria.where("status").is(1),
Criteria.where("premium").is(true)
);
// 정렬 및 페이지네이션
Query userQuery = new Query(condition)
.with(Sort.by(Sort.Direction.DESC, "lastLogin"))
.limit(50)
.skip(100);</code>