쿼리 연산자

12979 단어 mongodbmongodb

이 게시물은 pymongo를 기준으로 작성되었습니다.

1. 쿼리의 구조

{ <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}})

좋은 웹페이지 즐겨찾기