반갑습니다!
저번 포스트에서는 비교 문법에 대해서 알아보았습니다
이번 포스트에서는 논리 연산 문법에 대해 알아보며 조회시
필터 조건을 조금 더 고도화시켜보겠습니다 ^^
논리 연산 문법과 키워드는 다음과 같습니다!
① $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연산으로 묶어줬습니다 ^^
사용자의 의도대로 정상적인 결과가 출력된 것을 확인할 수 있겠습니다!