티스토리 뷰

728x90
반응형

Criteria는 직역하면 '기준'정도 되는 뜻으로, 리액티브 몽고 디비에서 쿼리 작성에 사용하는 클래스이다.

 

굉장히 다양한 메서드를 제공하며, 이를 이용하고 조합해 복잡한 Query, 혹은 Update 객체를 만들 수 있다.

 

이 글에서는 자주 쓰이는 메서드에 대해 짧게 정리하고 넘어가자.

 

  • is(): '=='를 사용하여 해당 필드와 일치하는 값을 조회
  • ne(): '!='를 사용하여 일치하지 않는 값을 조회
  • lt():  '<'를 사용해 주어진 값보다 작은 값을 조회
  • lte(): '<='를 사용
  • gt(): '>'사용
  • gte(): '>=' 사용
  • in(): 해당 필드 값이 리스트, 배열 중 하나와 일치하는 값 조회
  • nin(): 주어진 값 중 어떤 것도 포함하지 않는 값 조회
  • regex(): 정규표현식을 사용해 일치하는 값 조회
  • elemMatch(): 배열이나 리스트의 요소 중 하나가 해당 조건에 일치하는 값 조회
  • exist(): 해당 필드가 존재하는 도큐먼트 검색
  • type(): 해당 필드 타입이 지정한 BSON타입과 일치하는 도큐먼트 검색

이는 위에 말했듯 조합해서 사용할 수 있다.

Criteria criteria = Criteria.where("ratingList").in(ratingId).gte(20).and("age").lte(30);

추가로 실제 사용하면서 헷갈렸던 in()과 elemMatch()에 대해 정리하고 가자.

Criteria criteria = Criteria.where("ratingList").in("6429258eb046ab6cb410818d");
Criteria criteria = Criteria.where("ratingList").elemMatch(Criteria.where("_id").in(ratingId));
  • in()
    배열, 리스트 등의 내부에 특정 값이 포함되어 있는 모든 도큐먼트를 조회. 위 코드와 같은 경우는 ratingList 리스트에
    "6429258eb046ab6cb410818d"가 포함된 모든 도큐먼트를 조회하게 된다.
  • elemMatch
    배열, 리스트 필드 내부에 단순한 문자열이 아닌 객체가 있는 경우 여러 객체에 속한 필드의 동시비교를 위해 사용된다.
    위 코드를 보면 ratingList 리스트 필드 내부에 '_id'값이 ratingId와 일치하는 객체가 존재하는 도큐먼트를 찾는다.
    이때 '_id'와 같은 객체 내부 필드 이름이 반드시 존재해야 하며, 없는 경우 in()을 사용해야 한다.

마지막으로 실제 사용하고 있는 코드를 적으면 아래와 같다.

public Mono<Beer> findByRatingId(String ratingId) {

	Criteria criteria = Criteria.where("ratingList").in(ratingId);
	Query query = Query.query(criteria);
	Mono<Beer> beerMono = reactiveMongoTemplate.findOne(query, Beer.class);

	return beerMono;
}
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함