본문 바로가기
DB/MongoDB

데이터 베이스(No SQL) - MongoDB 논리 연산자

by nomfang 2021. 1. 23.
728x90
반응형

논리 연산자

문자의미

$and 2개 이상의 조건이 모두 일치하는 모든 도큐먼트 반환
$not 쿼리 조건과 일치하지 않는 도큐먼트 반환
$nor 2개 이상의 조건이 모두 일치하지 않는 모든 도큐먼트 반환
$or 2개 이상 쿼리 조건 중 일치하는 모든 도큐먼트 반환

$and

2개 이상의 조건이 모두 일치하는 모든 도큐먼트 반환

#문법 { $and: [ { 조건1 }, { 조건2 } , ... , { 조건N } ] }

#예시) 키가 160 이상이고, 주소가 "S"로 이후로 시작하는 값 조회

query = { "$and": [ { "height": { "$gte": 160 } }, { "address": { "$gt": "S" } } ] }

mydoc = mycol.find(query)

$not

쿼리 조건과 일치하지 않는 도큐먼트 반환

다른 연산자나 정규 표현식으로부터 얻은 결과의 여집합을 조회

#문법 { 필드 명: { $not: { 조건 } } }#예시) 이름이 A로 시작하지 않는 모든 user의 도큐먼트를 찾는다. query = { "first_name": { "$not": /^A/ } } mydoc = mycol.find(query)

$nor

2개 이상의 조건이 모두 일치하지 않는 모든 도큐먼트 반환

#문법 { $nor: [{ 조건1 }, { 조건2 }, ...] }

#예시) 나이가 19살 이하고, 키가 155 이상이 아닌 값 조회

query = { $nor: [ {"age": { "$lte": 19 } }, { "height": { "$gte": 155 } } ] }

mydoc = mycol.find(query)

$or

2개 이상 쿼리 조건 중 하나 이상 일치하는 모든 도큐먼트 반환

#문법 { $or: [{ 조건1 }, { 조건2 }, ...] }

#예시) 주소가 Seoul이고, 나이가 20이 넘는 값을 조회

query = { "$or": [ { "address": "Seoul" }, { "age": { "$gt": 20 } } ] }

mydoc = mycol.find(query)

Tip! : 💡 $or vs $in

 

같은 필드의 값에 대해 조건을 주어 조회를 한다면 $or < $in

#예시 account.find( { "qty": { "$in": [ 5, 15 ] } } )

다른 필드의 값에 대해 조건을 주어 조회를 한다면 $or > $in

#예시 account.find( { "$or": [ { "quantity": { "$lt": 20 } }, { "price": 10 } ] } )

반응형

댓글