안녕하세요. 이번 시간에는 요소, 평가, 배열 쿼리 연산자 세 개에 대해 알아보겠습니다.
요소 쿼리
$exists
해당 필드가 존재해야 하는지 존재하지 않아야 하는지를 정합니다.
{ 필드: { $exists: true/false } }
$type
해당 필드의 자료형이 일치하는 다큐먼트를 선택합니다. 선택가능한 자료형으로 double, string, object, array, binData, objectId, bool, date, null, regex, dbPointer, javascript, symbol, javascriptWithScope, int, timestamp, long, minKey, maxKey가 있습니다. 이 중에서 반절은 써본 적이 없는 자료형이네요. 혹시 쓸 일이 있을지도 모르니 알아둡시다.
{ 필드: { $type: 자료형 } }
평가 쿼리
$mod
나머지를 구하는 쿼리입니다. 예를 들어 { $mod: [4, 0] }을 하면 0, 4, 8, 12, 등등이 선택되겠죠. 자주 쓰이는 쿼리는 아닙니다.
{ 필드: { $mod: [ 나눌값, 나머지 ] } }
$regex, $options
정규표현식 검색을 가능하게 합니다. $regex와 $options 쿼리를 모두 사용해서 검색할 수도 있고, 그냥 일반 정규식처럼 { 필드: /패턴/옵션 } 해도 됩니다.
{ 필드: { $regex: 패턴, $options: 옵션 } }
$text
텍스트 검색을 하는 쿼리입니다. 제약이 좀 많습니다. 대표적으로 필드에 text index가 설정되어 있어야합니다. 유용한 점은 꼭 정확한 문자가 아니더라도 유사한 문자도 찾아준다는 겁니다.
{ $text: { $search: 문자, $language: 언어, $caseSensitive: 대소문자구별 } }
$where
자바스크립트 문법을 사용해 검색할 수 있습니다. 예를 들면 'this.credit == this.debit' 이런 식을 넣으면, credit 필드 값과 debit 필드 값이 같은 다큐먼트를 반환합니다.
{ $where: 자바스크립트식 }
배열 쿼리
여기서부터는 배열 값을 가진 필드를 조회하는 쿼리입니다
$all
$all 쿼리 안에 있는 모든 값을 포함하는 배열을 값으로 가진 태그를 선택합니다. 아래의 배열이 예에서 값1, 값2 등등 모든 값을 가지고 있어야합니다.
{ 필드: { $all: [값1, 값2, ...] } }
$elemMatch
$elemMatch는 조건이 배열 안의 요소와 일치하는 필드를 선택합니다.
{ 필드: { $elemMatch: { 조건1, 조건2, ... } } }
$size
$size는 말 그대로 배열의 length가 값과 일치하는 필드를 선택합니다.
{ 필드: { $size: 값 } }
다음 시간에는 공간 쿼리 연산자와 투사 연산자에 대해 알아보겠습니다.