티스토리 뷰
RDB만 써오던 나란 사람은 noSql을 잘 다루지 못하는 상황에서 무턱대고 몽고DB를 쓰고 있다.
쿼리도 짤 줄 모르면서 어째어째 잘 쓸 수 있는 이유는 Mongoose의 쿼리빌더 덕분이다.
물론 회사에서 현재 진행중인 프로젝트가 nodejs 상에서 knex를 사용하고 있기 때문에 (postgresql 이긴 하지만)
Mongoose의 쿼리빌더가 생소하게 느껴지진 않았다.
몽구스 쿼리빌더! 누구나 꼭 쓸만한 아주아주 기본적인! 몇가지만 정리해 보려고 한다.
일단 아래와 같이 Player 라는 model이 있다고 가정해보겠다.
const Player = new mongoose.Schema({
name: String,
team: String,
age : Number
})
where
가장 기본적인 놈이다. 말그대로 where 니깐.
(뒤에 나오는 'or' 빼고는 where를 쓸 수도 있고 생략할 수 있다! 대신 파라미터에 필드명도 같이 명시해야한다.)
Player.find()
.where('name') // name 에 대해서 이후 조건을 추가해준다.
equals, ne
필드 값이 특정 값과 일치하는지, 혹은 일치하지 않는지 비교한다.
Player.find()
where('name').equals('drogba')
Player.find()
ne('name', 'drogba')
gt, gte, lt, lte
딱 봐도 알겠지만 greater than (or equal), less than (or equal) 의 약자들이다.
Player.find()
.where('age').gt(30)
Player.find()
.lte('age', 35)
in, nin
각각 in, not in 이다.
Player.find()
.where('team').in(['chelsea', 'liverpool'])
Player.find()
.in('team', ['chelsea', 'liverpool'])
or
둘 중에 하나라도 만족하면 true. (얘는 where 랑 쓰지 않는다.)
Player.find()
.or([{'name', 'drobga'}, {'team', 'chelsea'}]) // 이름이 drogba 거나 팀이 chelsea 거나
select
명시하지 않으면 document의 모든 필드를 가져오지만, 특정 필드만을 가져오게 할 수 있다.
Player.find()
.where('name'),equals('drogba')
.select('name age') // 콤마가 아니라 공백으로 구분한다.
sort
정렬이다. asc, desc 가 있고, 1과 -1로 표현할 수도 있다. (default는 asc.)
Player.find()
.where('name').equals('drobga')
.sort('name age') // asc
.sort('-name -age') // desc
.sort({name: 'asc', age: 'desc'}) // object 형태로도 가능
마지막으로 정리하자면 위에 나온 메소드들을 아래와 같이 쭉쭉 붙여 쿼리를 만들 수 있는 것이다.
Player.find()
.where('name').equals('drogba')
.in('team', ['chelsea', 'liverpool'])
.gte('age', 30)
.select('name team age')
.sort('name team -age')
이 외에도 정말 많은 메소드들이 있지만 일단 굉장히 복잡한 쿼리가 아니라면
요정도 메소드 선에서도 필요한 쿼리는 대부분 짤 수 있을 것이다.
다음 기회에 다른 메소드들도 추가로 정리해보겠다. (아직 공부가 필요하다..ㅠ)
'개발 > Etc' 카테고리의 다른 글
Blocking, Non-blocking, Sync, Async 의 차이 (7) | 2021.10.19 |
---|---|
[애자일] MVP 란? (1) | 2019.09.16 |
AWS Lambda 배포 시 alias 명시하는 법 (+주의사항!) (0) | 2019.09.02 |
[애자일] 트럭(버스) 팩터란? (0) | 2019.04.05 |
- Total
- Today
- Yesterday
- javascript engine
- es6
- 테스트코드
- 근본
- nuxt
- 자바스크립트 엔진
- 스프링부트
- nuxtjs
- 근본설
- event loop
- 빌더패턴
- vuejs
- intellij
- Builder
- vue
- 프로미스
- 자바스크립트
- 모듈시스템
- 인텔리제이
- 이벤트루프
- vue.js
- springboot
- KCD2019
- javascript
- promise
- CommonJs
- await
- 야누자이
- KCD
- jest
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |