MongoDB 배열연산자

YoungJoon Suh·2022년 4월 14일
0

push배열의마지막위치에엘리먼트를넣습니다.배열이아닌필드에사용했을경우,필드의타입을배열로바꿉니다.shampoo를대괄호로묶어배열로만들어쿼리를작성해본다.이결과아무런도큐먼트도반환하지않습니다.그이유는MongoDB가배열필드의값으로Shampoo만담긴배열을찾고있기때문입니다.추가적인연산자가없을때에는지정한쿼리와정확히일치하는도큐먼트만찾습니다.배열필드를쿼리할때,배열요소의순서가영향을미치는지살펴보겠습니다.순서를바꿔보았을때,순서가중요하지않은경우에는동일한도큐먼트가반환될것입니다.순서가중요하다면다른도큐먼트를반환하거나,(순서가맞는배열이없는경우)아무것도반환하지않을것입니다.순서를바꾸자결과가0개가나왔습니다.=>순서가중요하다.배열요소의순서를신경쓰지않고특정요소를포함하는모든도큐먼트를어떻게찾을수있는지알아보자.MQL에는"push 배열의 마지막 위치에 엘리먼트를 넣습니다. 배열이 아닌 필드에 사용했을 경우, 필드의 타입을 배열로 바꿉니다. shampoo를 대괄호로 묶어 배열로 만들어 쿼리를 작성해 본다. 이 결과 아무런 도큐먼트도 반환하지 않습니다. 그 이유는 MongoDB가 배열 필드의 값으로 Shampoo만 담긴 배열을 찾고 있기 때문입니다. 추가적인 연산자가 없을 때에는 지정한 쿼리와 정확히 일치하는 도큐먼트만 찾습니다. 배열 필드를 쿼리할 때, 배열 요소의 순서가 영향을 미치는지 살펴보겠습니다. 순서를 바꿔 보았을 때, 순서가 중요하지 않은 경우에는 동일한 도큐먼트가 반환될 것입니다. 순서가 중요하다면 다른 도큐먼트를 반환하거나, (순서가 맞는 배열이 없는 경우) 아무것도 반환하지 않을 것입니다. 순서를 바꾸자 결과가 0개가 나왔습니다. => 순서가 중요하다. 배열 요소의 순서를 신경 쓰지 않고 특정 요소를 포함하는 모든 도큐먼트를 어떻게 찾을 수 있는지 알아보자. MQL에는 "all"이라는 훌륭한 연산자가 있습니다.
이 쿼리는 배열 필드에 지정한 요소가 있는 모든 도큐먼트를 반환합니다.
all을 사용하면 배열 요소의 순서와 상관없이 지정된 요소가 포함된 모든 도큐먼트를 찾을 수 있습니다. 배열 연산자를 이용해 배열의 길이로 결과를 제한해 보자. 배열의 길이에 따라 결과 커서를 제한하려면 쿼리에 $size를 추가합니다.size : 20으로 정확히 20개의 amenities를 가지며 지정한 요소가 모두 배열에 포함된 도큐먼트만 반환되었습니다.
특정한 요소를 찾지 않는다면, $size만을 사용하여 배열 길이로만 쿼리할 수도 있습니다.

배열 연산자 (Array Operators)
{ : {"size" : <number>} } 지정된 배열 필드가 주어진 길이와 정확히 일치하는 모든 도큐먼트들이 있는 커서를 반환합니다. { <array field> : {"all" : } }
지정된 배열 필드의 배열 순서와 관계없이 지정된 모든 요소가 포함된 모든 도큐먼트들이 있는 커서를 반환합니다.

배열 필드를 배열 연산자를 쓰지 않고 쿼리할 때,
{ : }
지정된 배열 필드에 요소와 순서가 정확히 일치하는 배열을 가진 도큐먼트를 찾습니다.
{ : }
지정된 배열 필드에 문자열로 주어진 요소가 포함된 모든 도큐먼트를 찾습니다.

profile
저는 서영준 입니다.

0개의 댓글