본문 바로가기
MongoDB/MongoDB 기본 CRUD

[MongoDB 기본 CRUD] 7. 논리 연산 문법 사용하여 find()로 조건 조회하기

by Fletcher 2024. 8. 13.

 

반갑습니다!

 

저번 포스트에서는 비교 문법에 대해서 알아보았습니다

이번 포스트에서는 논리 연산 문법에 대해 알아보며 조회시

필터 조건을 조금 더 고도화시켜보겠습니다 ^^

 

 

논리 연산 문법키워드는 다음과 같습니다!

① $or

논리연산 중 OR연산을 의미합니다

두 피연산자 중 하나 이상을 만족하는 조건입니다

 

② $and

논리연산 중 AND연산을 의미합니다

두 피연산자 모두를 만족해야 하는 조건입니다

 

③ $not

논리연산 중 NOT연산을 의미합니다

해당 피연산자의 반대조건을 만족하는 조건입니다

 

 

 

 

 

예시 코드를 들어보겠습니다

 

db.users.find({ address: "서울", age: 45 })

두 조건을 콤마(,)로 연결할 경우 암시적으로 AND연산을 의미합니다

따라서 address가 서울이고 age가 45인 두 조건을

$and 키워드로 묶은 것과 같은 조건입니다 ^^

 

db.users.find({ $and: [ {address: "서울"}, {age: 45} ] })

1번의 예시를 $and 키워드를 이용해 명시적으로 표현할 경우

위와 같이 나타낼 수 있습니다

키워드에 대한 값을 리스트로 지정하며 리스트의 원소로

해당 조건에 대한 딕셔너리 형태를 갖습니다 ^^

 

db.users.find({ $or: [ { address: "경기도" } , { age: 45 } ] })

이번에는 OR 연산인데요

AND와 마찬가지로 $or 키워드를 사용하고

해당 값을 리스트로 넣어주면 됩니다

$or 키워드에 대한 값으로 받는 리스트 안에서 사용하는 콤마(,)는

elements를 구분하는 기호이므로 AND연산과는 무관합니다 ^^

 

db.users.find({ age: { $not: { $eq: 45 } } })

이번에는 $not 키워드를 사용하여 NOT연산을 이용했는데요

age 필드의 값이 45와 매칭되지 않는 것

즉, age의 값이 45가 아닌 데이터들이 조건의 대상이 되겠습니다 ^^

 

 

 

 

 

 

 

이해를 돕기 위해 연습문제를 풀어보겠습니다 ^^

 

 

1. users 컬렉션 중 name이 Brown이거나 age가 35인 도큐먼트의 모든 필드 출력

 

위와 같이 명령어를 입력해주시면 되겠습니다 ^^

특정 필드만 출력하지 않고 해당 되는 도큐먼트의 모든 필드를 출력하는 조건이니

별도로 컬럼을 지정해주지 않아도 되겠죠

 

해서 find() 함수의 파라미터로 Filter 조건만 넣어줬는데요

조건의 의미가 "또는" 즉, OR 연산이므로

$or 키워드에 대해 해당 조건을 elemets로 갖는 리스트를 value로 넣어줬습니다 ^^

 

 

 

 

 

2. users 컬렉션 중 name이 Brown이 아니고 age가 45가 아닌 도큐먼트의 모든 필드 출력

 

위 두 이미지는 동일한 결과를 갖습니다

하지만 자세히 보면 find() 함수의 파라미터로 들어가는

필터 조건의 구성에 조금 차이가 있는데요 ^^

 

첫 번째 이미지에서는 명시적으로 $and 키워드를 사용하지 않았고,

두 번째 이미지에서는 $and 키워드를 사용하였습니다

 

MongoDB에서는 명시적으로 $and 키워드를 사용하지 않아도

모든 조건을 AND조건으로 처리하기 때문에 첫 번째 이미지와 같이 명령어를 입력해도

사용자의 의도대로 AND 연산으로 조건이 처리됩니다 ^^ 

 

 

 

 

 

 

2. users 컬렉션 중 name이 Brown이 아니거나 age가 45가 아닌 도큐먼트의 모든 필드 출력

 

 

보시는 바와 같이 find() 함수의 파라미터로 필터 조건을 하나 넣어줬습니다

해당 필터에서 $or 키워드를 사용하여 value로 리스트를 받았는데요

name 컬럼에 $not과 $eq 키워드를 사용하여 Brown이 아닌 조건과

age 컬럼에 마찬가지로 $not과 $ez 키워드를 사용하여 45가 아닌 조건을

OR연산으로 묶어줬습니다 ^^

 

사용자의 의도대로 정상적인 결과가 출력된 것을 확인할 수 있겠습니다!