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