- 대략적인 연산자 종류이다.
예시
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
에 관한 내용이다.
{"$expr" : {"$eq" : {"$a","$b"}}}
$expr을 이용하여 해당 값이 어떤 필드와 같아야하는지 따로 지정하지 않고도 자체적으로 동일한 도큐먼트 내에서 값을 비교 할수가 있다.
이떄 필드에 $값이 들어가면 필드의 값을 의미한다.
좀더 구체적인 예시를 들어보자
우리는 같은 곳에서 자전거를 빌리고 1200초 이상 빌린 사용자가 필요하다고 가정을 하자
{$expr:{"$and" :[
{"$gt" :["$time", 1200]},
{"$eq" :["$end", "$start"]}
]}}
{$expr:[
{"$gt" :["$time", 1200]},
{"$eq" :["$end", "$start"]}
]}
내가 볼떄는 상당하게 복잡하면서도.. 익숙해지면 굉장히 편해질껏 같다
배열인 데이터에 사용할수 있는 연산자들에 대한 정리이다.
우리는 앞선 글에서 push를 이용하여 배열에 값을 추가하는 방법을 알아보았다.
그러면 배열에 있는 값을 가져오는 방법은 무엇일까?
간단하게 필드를 지정해 가져오면 된다
{"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"]}
이렇게 사이즈도 줄수가 있다.
배열을 다룰떄에는 형태가 조금 다르다는 것에 유의하여 사용하여야 한다.
쉽게 설명하면 데이터중 원하는 데이터만 가져오는 것이다.
SQL문을 통해서 MySQL에서는 원하는 값만 가져오듯이
도큐먼트에 수많은 필드가 있고 그 필드들을 모두 가져오면 가독성이 떨어지기 떄문에
Projection을 이용하여 원하는 필드만을 가져온다.
{"a" : {"$size" : 20, $all : ["shampoo", "lotion"]},
{"price":1, "address":1}
이렇게 두번쨰 인자로 원하는 필드만 보이게 입력해 주는 것이다.
이곳에서 0과1은 필드의 값이 아니다.
이라는 역할을 지니고 있다.
이 외에도 Aggregation에 대한 내용이있다.
그러므로 후에 필요가 있거나, 아니면 NoSQL에 대해서 많이 알게 되었을떄 그떄 공부해보고 활용해보자!