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


소요시간이 늘긴 했는데, 도큐먼트 수가 많지 않아서 크게 차이가 나진 않았다.