지난 포스트에서 내용을 확인하는 find()함수를 알아보았습니다. find() 함수 내부에서 다양한 연산자들을 조합하면, 원하는 데이터들을 쉽게 찾을 수 있습니다.
지난번에 실습하면서 모든 db를 지웠으므로 사전에 실습을 위한 db, 콜렉션을 만들어 두고 시작하겠습니다.
use test //데이터베이스 생성
db.createCollection("testCollection") //컬렉션 생성
db.testCollection.insert([
{"name": "alex", "age": 23, "sex": "m"},
{"name": "triss", "age": 21, "sex": "f"},
{"name": "morgan", "age": 24, "sex": "f"},
{"name": "ed", "age": 21, "sex": "m"},
{"name": "reina", "age": 23, "sex": "f"},
{"name": "george", "age": 22, "sex": "m"}
]) //도큐먼트 생성
1. 기본적인 find() 함수의 사용
그럼 find() 함수와 연산자를 이용한 다양한 활용법에 대해 알아보겠습니다.
우선 컬렉션 내부의 모든 도큐먼트를 확인하는 방법입니다.
db.컬렉션명.find()
db.컬렉션명.find({ })
특정 필드 값을 가진 도큐먼트를 검색하는 방식은 다음과 같습니다. 예시로 컬렉션에서 성별이 남자인 도큐먼트들을 찾아보겠습니다.
db.컬렉션명.find({필드: 필드값})
추가적으로, 굉장히 독특한 기능이 있는데요. find() 함수 뒤에 .pretty()를 붙여주면 보기 편한 형태로 출력이 됩니다.
2. 쿼리로 find() 함수 이용하기
find() 함수의 기본형은 다음과 같습니다. 방금까지는 쿼리를 생략했는데요. 쿼리를 추가해서 이용하면 조건 필드만으로는 찾아내기 어려운 조건으로 검색을 할 수 있습니다. projection은 투사라고도 하는데 이것 또한 마지막에 가서 다시 알려드리겠습니다.
db.컬렉션명.find(쿼리, projection)
2-1. 비교 쿼리
첫 번째로 소개할 친구들은 비교 쿼리입니다.
db.컬렉션명.find({필드명: {쿼리: 값}})
쿼리 | 설명 |
$eq | 일치하는 값을 찾는다. |
$gt | 지정된 값보다 큰 값을 찾는다. |
$gte | 크거나 같은 값을 찾는다. |
$lt | 지정된 값보다 작은 값을 찾는다. |
$lte | 작거나 같은 값을 찾는다. |
$ne | 일치하지 않는 모든 값을 찾는다.($eq의 부정) |
$in | 배열에 지정된 값 중 하나와 일치한 값을 찾는다. |
$nin | 배열에 지정된 값과 일치하지 않는 값을 찾는다. |
다음은 몇몇 쿼리들을 사용해본 결과입니다.
2-2. 논리 쿼리
다음은 논리 쿼리입니다. 조건과 쿼리에 따른 결과를 반환하며, 조건은 2개 이상이 올 수 있습니다.
db.컬렉션명.find({쿼리: [{조건1}, {조건2}, ...]})
쿼리 | 설명 |
$or | 조건들 중 하나라도 true면 반환 (true: 조건과 일치, false: 조건과 불일치) |
$and | 조건들이 모두 true일 때 반환 |
$not | 조건이 false일 때 반환 |
$nor | 조건들이 모두 false일 때 반환 |
2-3. 요소 쿼리
요소 쿼리는 검색보다는 쿼리의 검색을 돕는 쿼리에 가깝습니다.
({필드: {쿼리: 값}})
/*
쿼리 값은 $exists면 true/false가 오고
$type이면 타입이 옵니다.
*/
쿼리 | 설명 |
$exists | 필드가 존재해야 하는지를 결정합니다. (true/false) |
$type | 필드의 자료형이 일치하는 도큐먼트를 가져옵니다. |
2-4. 평가 쿼리
평가 쿼리는 좀 더 구체적인 검색 옵션을 지원합니다. 활용할 일도 그렇게 많지 않은 것 같고, 각 쿼리마다 사용법이 조금씩 달라서 자세한 내용은 참조 링크를 참조해주세요.
({필드: {쿼리: }})
쿼리 | 설명 |
$mod | 나머지 연산을 수행하고 그 결과를 반환합니다. |
$regex | 정규식 표현에 따른 검색을 합니다. |
$text | 텍스트 검색을 수행합니다. |
$where | 자바스크립트 표현식으로 검색이 가능하게 해줍니다. |
2-5. 배열 쿼리
배열 쿼리는 도큐먼트 필드의 값이 배열일 때 이용가능한 쿼리입니다.
({필드: {쿼리: }})
/*
$all은 쿼리 뒤에 내용이 [대괄호]에 담기고,
$elemMatch와 $size는 {중괄호}에 담깁니다.
*/
쿼리 | 설명 |
$all | [ ] 내부의 모든 요소를 포함하는 배열을 반환 |
$elemMatch | 배열 필드의 요소가 모든 조건과 일치하는 경우 반환 |
$size | 배열 사이즈가 지정된 크기이면 반환 |
2-6. 투사 쿼리
투사 쿼리는 검색보다는, 검색 이후 후처리에 대한 연산을 담당합니다. 보통, 결과에서 n개의 결과를 가져오는 경우에 사용하게 됩니다.
finc({쿼리}, {투사})
쿼리 | 설명 |
$ | 지정한 번째의 요소를 가져옵니다. |
$elemMatch | 조건에 일치하는 첫 번째 요소들을 가져옵니다. |
$meta | 문서 내부에서 메타데이터와 일치하는 요소를 가져옵니다. |
$slice | 지정 수 만큼 앞에서부터 잘라서 가져옵니다. |
{필드.$: n} //n은 숫자
{필드: {$elemMatch: {속성: 값}}}
{필드: {$meta: "메타 키워드"}}
{필드: {$slice: n}}
참조
'Programming > 데이터베이스' 카테고리의 다른 글
[MongoDB] update()와 기존 데이터 수정하기 (0) | 2022.02.07 |
---|---|
[MongoDB] 데이터베이스, 컬렉션 (0) | 2022.01.28 |
[MongoDB] BSON (0) | 2022.01.27 |
[MongoDB] 몽고DB (0) | 2022.01.27 |
[MySQL] 문자열 타입 (0) | 2022.01.25 |
댓글