데이터베이스/MongoDB
프로젝션 연산자
haventmetyou
2023. 12. 29. 11:12
배열 필드 프로젝션
db.inventory2.find({}, {'tags.0': 1})
tags 필드에 첫 번째 요소(첫 번째 인덱스)가 나타나지 않음
예시 데이터 입력
db.stock.insertMany([
{item: 'journal', instock: [ {warehouse: 'A', qty: 5}, {warehouse: 'C', qty: 15} ]},
{item: 'notebook', instock: [ {warehouse: 'C', qty: 5} ]},
{item: 'paper', instock: [ {warehouse: 'A', qty: 60}, {warehouse: 'B', qty: 15} ]},
{item: 'planner', instock: [ {warehouse: 'A', qty: 40}, {warehouse: 'B', qty: 5} ]},
{item: 'postcard', instock: [ {warehouse: 'B', qty: 15}, {warehouse: 'C', qty: 35} ]},
{item: 'test', instock: [{0: 'test_data'}]}
])
db.stock.find({}, {_id: 0, 'instock.0': 1})
instock.0의 의미는 배열의 첫 번째 요소가 아닌 instock 내부의 오브젝트 중 '0'이라는 필드를 가리키는 것
> instock 내부에 도큐먼트가 있으면 그저 빈 도큐먼트로 표현됨
프로젝션에서는 점 연산자가 배열의 요소를 가리키지 않음
> $slice, $elemMatch, $ 연산자 등을 통해 배열의 요소를 숨기거나 드러내는 방법 사용
하나만 가져오고 싶은 경우 $slice 사용
db.inventory2.find({}, { tags: {$slice: 1} })
$ 연산자
$를 사용하는 필드를 쿼리에 사용
db.inventory2.find({tags: 'red'}, {_id: 0, item: 0, qty: 0})
tags의 필드 값 중 'red'를 갖는 도큐먼트 찾음
db.inventory2.find({tags: 'red'}, {'tags.$':1})
$ 연산자를 이용하면 'red' 태그만 표시되게 할 수 있음