쿼리 연산자
이 게시물은 pymongo를 기준으로 작성되었습니다.
1. 쿼리의 구조
{ <field> : {<operator1> : <value>, <operator2> : <value>}...}
{ <field> : {<operator1> : <value>, <operator2> : <value>}...}
기본적으로는 필드이름이 가장 바깥에 있고, 안쪽에 해당하는 연산자가 들어간다.
{"height" : {"$gte" : 175, "$lte" : 180}, "width" : {"$gte":60}}
하지만 예외적으로 쓰이는 연산자들이 있다. 대표적으로는 $or, $and, $nor
{"$or":[{"status":"A"},{"qty":{"$lt":30}}]}
2. 점 표기법
점 표기법은 BSON 내부의 Objectdp 접근하기 위한 방법이다.
{
"name" : {"first" : "kim", "last" : "soo min"
}
# name 안의 first 값을 조회하기 위해서는 다음과 같이 사용한다.
collection.find({"name.first" : "kim"})
마찬 가지로 배열의 첫 번째 요소로 news 값을 가지는 도큐먼트를 찾고싶을때는 다음과 같이하면 된다.
{
"groups : ["news","sports"]
}
collection.find({"groups.0" : "news"})
3. 비교 연산자
operator | 설명 |
---|---|
$eq | (equals) 주어진 값과 일치하는 값 |
$gt | (greater than) 주어진 값과 큰 값 |
$gte | (greater than or equals) 주어진 값 보다 크거나 같은 값 |
$lt | (less than) 주어진 값 보다 작은 값 |
$lte | (less than or equals) 주어진 값 보다 작거나 같은 값 |
$ne | (not equal) 주어진 값과 일치하지 않는 값 |
$in | 주어진 배열 안에 속하는 값 |
$nin | 주어진 배열 안에 속하지 않는 값 |
예시
좋아요 수가 10 이상 30이하인 도큐먼트 검색
articles.find({"likes":{"$gte" : 10 , "$lte": 30}})
4. 논리 연산자
operator | 설명 |
---|---|
$or | 주어진 조건 중 하나라도 true 일 때 true |
$and | 주어진 모든 조건이 true 일 때 true |
$nor | 주어진 조건 중 하나라도 false 일 때 true |
$not | 주어진 조건이 false 일 때 true |
예시
게시글 중 제목이 article01 이거나 작가가 Alpha 인 도큐먼트
articles.find({"$or" : [{"title" : "article01"}, {"writed" : "Alpha"}]})
and 연산자는 쓸 일이 많지 않다.
다음의 두 쿼리는 서로 같은 의미를 갖는다.
inventory.find({"$and" : [
{"qty":{"$gt":10}},
{"qty":{"$lt":100}}
]})
inventory.find({"qty":{"$gt":10,"$lt":100}})
5. 문자열 연산자
operator | 설명 |
---|---|
$mod | 그 필드에 modulo operation을 통해 특정 결과가 나온 Document를 선택한다. |
$regex | 특정 정규 표현식과 맞는 Document를 선택한다. |
$text | 문자열 검색의 기능을 수행한다. |
$where | 자바스크립트로 알맞은 Document를 선택한다. |
$text는 컬렉션당 하나만 만들 수 있는 문자열 인덱스에서만 작동한다.
문자열 인덱스 설정 방법
collection.create_index([('field', pymongo.TEXT)], default_language = 'english')
6. 배열 연산자
operator | 설명 |
---|---|
$all | 순서와 상관없이 배열 안의 요소가 모두 포함되면 선택한다. |
$elemMatch | $elemMatch 조건과 맞는 배열 속 요소를 가진 Document를 선택한다. |
$size | 해당 배열의 크기가 같은 Document를 선택한다. |
- $all 연산자는 배열 속 모든 값을 포함하는 Document를 찾는다.
items.find({"tags": {"$all":["book","appliance"]}})
- $elemMatch 연산자는 해당 fieldrk query들을 모두 만족하는 값을 갖는 도큐먼트를 검색한다.
score.find({"results": {"$elemMatch":{"$gte":80, "$lt":85}}})
- $size 연산자는 해당 field가 모든 query를 만족하는 값을 갖는 도큐먼트를 검색한다.
score.find({"results":{"$size":3}})
Author And Source
이 문제에 관하여(쿼리 연산자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@highway92/쿼리-연산자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)