MongoDB, Morphia - 같은 도큐먼트 내의 두 필드 비교 쿼리 (Query - Comparing two fields in Same Document)
2018. 11. 17. 16:48ㆍ개발/기타
MongoDB에 같은 도큐먼트 내의 두 필드를 비교하는 쿼리를 보내야 할 상황이 있었다.
비교해야 하는 두 필드를 A, B라고 하자.
평소 비교 쿼리를 만들 때 처럼, "find" 와 "$lt" 조건을 통해 쿼리를 만들었다.
해당 쿼리에서, "$lt" 다음에 써 주어야 하는 비교 대상이 상수인 경우는 문제가 생기지 않는다.
하지만 이번에는 비교 대상도 변수가 되어야 했다. 그래서 "$lt" 에 변수값을 상수값처럼 "this.B" 와 같은 형태로 써주었는데, 에러가 발생하였다.
에러 내용은 인티저 값인 A와 String인 "this.B"를 비교할 수 없다는, 결국 타입이 맞지 않다는 에러였다.
그래서 where("this.A < this.B") 와 같은 형태의 쿼리로 바꾸어서 실행했는데, 원하는 결과를 얻을 수 있었다.
하지만, where 쿼리는 JavaScript Expression을 String으로 넘겨서 실행하는 방식으로 동작한다고 알고 있어서,
Measure Time을 측정해 볼 필요가 있었다.
테스트 가능한 환경은 10000개 미만의 도큐먼트가 존재하는 컬렉션.
A와 B는 둘 다 인덱싱되어 있지 않다.
기존에 find와 "$lt" 조건으로 변수와 상수를 비교하였을 때 -> 소요시간 : 300ms
where절을 사용하여 변수와 변수를 비교하였을 때 -> 소요시간 : 400ms
소요시간이 늘긴 했는데, 도큐먼트 수가 많지 않아서 크게 차이가 나진 않았다.
'개발 > 기타' 카테고리의 다른 글
cron으로 스케쥴러 만들기. (0) | 2019.02.15 |
---|---|
Chrome Extension - response를 보여주는 chrome extension 작성 (0) | 2018.11.12 |
Redis - Jedis 사용 시 겪었던 문제. (0) | 2018.10.13 |
Elasticsearch - ELK 스택을 사용하면서 겪었던 이슈들 (0) | 2018.09.01 |
Slack에 메시지 보내기. (0) | 2018.08.04 |