36일차 - 2 [ 데이터베이스 NoSQL - 연산자 종류 ]

비교 연산자

  • 대략적인 연산자 종류이다.

예시

db.trips.find({"a" : {"$lte" : 70}, "b" : {"$ne" : "customer"}})
db.trips.find({"a" : {"$lte" : 70}, "b" : {"$eq" : "not customer"}})

trips라는 컬렉션에서 a가 70이하이고 b가 customer이 아닌 값을 가져 오라는 명령문

논리 연산자

db.collection_name.find($nor: [{result:"a"}, {result:"b"}])

result가 a,b가 아닌 값들을 보여준다.

and연산자 같은 경우에는 기본적으로 내재되어 있다.

db.collection_name.find({sector: "a"}, {name:"hojin"})

이 명령어는

db.collection_name.find($and : [{sector: "a"}, {name:"hojin"}])

이것과 같다.

표현 연산자

$expr에 관한 내용이다.

  • find까지의 내용을 제외하고 적어보면
{"$expr" : {"$eq" : {"$a","$b"}}}

$expr을 이용하여 해당 값이 어떤 필드와 같아야하는지 따로 지정하지 않고도 자체적으로 동일한 도큐먼트 내에서 값을 비교 할수가 있다.

이떄 필드에 $값이 들어가면 필드의 값을 의미한다.

  • 저 명령어는 a,b의 값을 서로 비교하는 것이다.

좀더 구체적인 예시를 들어보자

우리는 같은 곳에서 자전거를 빌리고 1200초 이상 빌린 사용자가 필요하다고 가정을 하자

{$expr:{"$and" :[
    {"$gt" :["$time", 1200]},
    {"$eq" :["$end", "$start"]}
    				]}}
{$expr:[
    {"$gt" :["$time", 1200]},
    {"$eq" :["$end", "$start"]}
    				]}

내가 볼떄는 상당하게 복잡하면서도.. 익숙해지면 굉장히 편해질껏 같다

배열 연산자

배열인 데이터에 사용할수 있는 연산자들에 대한 정리이다.

우리는 앞선 글에서 push를 이용하여 배열에 값을 추가하는 방법을 알아보았다.

그러면 배열에 있는 값을 가져오는 방법은 무엇일까?

간단하게 필드를 지정해 가져오면 된다

  • a의 필드는 배열의 형태라고 가정하겠다.
{"a":"shampoo"}

a라는 배열안에 shampoo가 있다면 값을 가져온다.

{"a":["shampoo"]}

만약 이런식으로 배열의 형태로 작성하게 되면
a라는 필드에 shampoo만이 있는 도큐먼트만 가져온다.

  • 정확히 하나만 들어있는 도큐먼트를 가져온다.

하지만 만약에

{"a": ["shampoo", "lotion"]}

이런 명령어를 입력한다고 생각해보자
그러면 a라는 필드 안에 데이터가 [lotion, shampoo]이렇게 순서가 반대로 들어가 있다면

해당 값은 불러오지 않는다.

  • 왜냐하면 순서가 매우 중요하기 떄문에

그렇다면 순서를 신경쓰지 않고 필드를 불러와야할 필요가 있다면

{"a" : {$all : ["shampoo", "lotion"]}

이렇게 all을 사용하면된다.

  • 저 값이 들어가 있는 배열을 가져온다(순서상관 없이)
{"a" : {"$size" : 20, $all : ["shampoo", "lotion"]}

이렇게 사이즈도 줄수가 있다.

배열을 다룰떄에는 형태가 조금 다르다는 것에 유의하여 사용하여야 한다.

Projection

쉽게 설명하면 데이터중 원하는 데이터만 가져오는 것이다.

SQL문을 통해서 MySQL에서는 원하는 값만 가져오듯이

도큐먼트에 수많은 필드가 있고 그 필드들을 모두 가져오면 가독성이 떨어지기 떄문에

Projection을 이용하여 원하는 필드만을 가져온다.

{"a" : {"$size" : 20, $all : ["shampoo", "lotion"]},
	{"price":1, "address":1}

이렇게 두번쨰 인자로 원하는 필드만 보이게 입력해 주는 것이다.

이곳에서 0과1은 필드의 값이 아니다.

  • 0일경우 해당 필드를 제외, 1일경우 해당 필드를 포함

이라는 역할을 지니고 있다.

이 외에도 Aggregation에 대한 내용이있다.

  • 간략하게 말하면 굳이 안써도는 되지만 쓰면 좀더 간편한 프레임워크이다.
  • 우리가 간단한 배열에 map이후 reduce를 사용하면 배열의 모든 값을 map처리해주고 다 더해서 return된다는 것을 알고 있듯이
  • Aggregation은 우리가 결과를 알고 있을떄 혹은 좀더 익숙할떄 사용하는 프레임 워크이다.

그러므로 후에 필요가 있거나, 아니면 NoSQL에 대해서 많이 알게 되었을떄 그떄 공부해보고 활용해보자!

좋은 웹페이지 즐겨찾기