MongoDB 배열 연산자와 Projection

YoungJoon Suh·2022년 4월 14일
0

MongoDB의 배열 연산자와 find의 두 번째 인자인 Projection을 이용해 쿼리하는 방법에 대해 알아보자.
도큐먼트에 너무 많은 필드와 정보가 있기 때문에 그 안의 정보를 확인하기 어려울 때가 있습니다. 이를 완화하기 위해 find 쿼리에 프로젝션을 추가해 현재 관심 있는 필드만 결과로 가져올 수 있습니다.
db.listingsAndReviews.find(
{"amenities":{"size":20,"size":20, "all":["Internet", "Wifi", "Kitchen", "Heating", ... ]}},
{"price":1, "address": 1}).pretty()

두번째 인자로 위와 같이 projection을 추가할 경우, price와 address 필드만 결과 커서에 포함됩니다.
db..find({},{})
:1 - 지정한 필드를 포함
:0 - 지정한 필드를 제외
프로젝션을 사용할 때, 0과 1을 사용해 결과에서 표시하거나 표시하지 않을 필드를 지정할 수 있습니다.
1을 사용하는 경우 지정한 필드와 _id 필드만 가져옵니다.
0을 사용하는 경우 지정한 필드를 제외한 모든 필드가 표시됩니다.
한 번의 프로젝션에서 0과 1을 혼합할 수 없습니다.
1과 0을 혼용할 수 있는 유일한 경우는 디폴트로 포함되는 _id필드를 제외하도록 특별히 요청할 때입니다. 이와 같은 요청이 없다면 _id필드가 기본적으로 도큐먼트에 포함되기 때문입니다.
elemMatch: 쿼리에 사용할 수 있는 배열 연산자.
결과에는 쿼리와 일치하는 모든 도큐먼트가 표시되었지만 도큐먼트의 모든 필드 값을 가져오지는 않았습니다.
find 명령에서는 첫 번째 인자인 쿼리에 해당하는 도큐먼트를 찾은 뒤 Projection합니다.
elemMatch는지정한배열필드가도큐먼트에존재하고조건에맞는요소가있는경우에만해당필드를결과에포함시킵니다.조건에맞는요소가여러개일경우일치하는첫번째요소만Projection합니다.elemMatch는 지정한 배열 필드가 도큐먼트에 존재하고 조건에 맞는 요소가 있는 경우에만 해당 필드를 결과에 포함시킵니다. 조건에 맞는 요소가 여러 개일 경우 일치하는 첫 번째 요소만 Projection합니다. elemMatch는 쿼리의 프로젝션 뿐만 아니라 find명령의 쿼리 부분에서도 사용할 수 있습니다.
쿼리에 프로젝션이 없기 때문에 결과에 각 도큐먼트의 모든 필드가 포함됩니다.
db..find({},{})
projection에서 0과 1을 사용하여 특정 필드에 포함 또는 제외할 지 여부를 지정할 수 있습니다. 하지만 0과 1을 혼용해서 사용할 수 없습니다.
예외적으로 디폴트로 포함되는 _id 필드를 명시적으로 제외하는 경우 혼용해서 사용할 수 있습니다.
{"_id: 0", :1}
elemMatch {<field>:{"elemMatch":{:}}}
첫번째 인자에서 쓰일 경우, 배열 필드의 서브 도큐먼트 필드가 쿼리와 일치하는 문서를 찾습니다.
두번째 인자에서 쓰일 경우, 지정된 기준과 일치하는 요소가 하나 이상있는 배열 요소만 프로젝션합니다.
elemMatchfind명령의쿼리및프로젝션부분에서모두사용할수있는배열연산자입니다.elemMatch는 find 명령의 쿼리 및 프로젝션 부분에서 모두 사용할 수 있는 배열 연산자입니다.elemMatch는 지정된 쿼리와 일치하는 요소가 하나 이상 있는 배열 필드를 가지고 있는 도큐먼트를 찾을 수 있습니다.
그리고 지정된 기준과 일치하는 요소가 하나 이상 있는 배열 요소만 프로젝션합니다.

profile
저는 서영준 입니다.

0개의 댓글