...
배열 수정 연산자
$
list: [1, 2, 3] 이라는 필드가 있다고 칩시다.
// list: [1, 2, 3]
// list: 2 를 기억해서 list.2의 요소값을 5로 바꾼다.
db.zero.update({ list: 2 }, { 'list.$': 5 }) // list: [1, 5, 3]
위의 쿼리를 통해 두 번째 요소를 바꿀 수 있습니다. 즉 찾은 값의 위치를 기억하는 연산자입니다.
$addToSet
- 배열필드에 해당 요소가 없으면 추가하고, 있으면 아무것도 하지 않습니다.
- 몽고DB에서 자체적으로 배열에 해당 요소가 있는지 검사해주기 때문에 편합니다.
{ $addToSet: { 필드1: 값, 필드2: 값, ... } }
$pop
- 배열 메소드처럼 몽고DB 배열에서 맨 앞 또는 맨 뒤 요소를 꺼내는 겁니다.
- shift와 pop을 합쳐놓은 연산자입니다.
- -1 값은 shift 기능,
- 1 값은 pop 기능을 합니다.
{ $pop: { 필드1: ±1, 필드2: ±1, ... } }
$pull
- 배열에서 조건을 만족하는 특정한 요소를 꺼냅니다.
- 꺼내는 조건은 쿼리 연산자와 같습니다.
{ $pull: { 조건1, 조건2, ... } }
$pullAll
- $pull 연산자와는 달리 $pullAll은 조건이 아니라 그냥 일치하는 값을 배열에서 꺼냅니다.
{ $pullAll: { 필드: [값1, 값2, ...] } }
$push
- 배열 필드에 값을 push합니다.
{ $push: { 필드1: 값, 필드2: 값, ... } }
조심해야할 것은 값이 배열일 경우 한 번에 push해버립니다.
만약 원래 [1, 2]라는 배열이 있다면 [3, 4, 5]를 push할 경우 [1, 2, [3, 4, 5]]가 되어버립니다.
3, 4, 5를 따로따로 push하고 싶다면 $each 연산자를 사용해야 합니다.
{ $push: { 필드: { $each: 배열 } } }
$each
- 방금 위에서도 사용되었습니다. 다른 용례로 $addToSet과 같이 사용하는 경우가 있습니다.
$addToSet도 $push처럼 한 번에 배열을 집어넣기 때문에 따로따로 넣고 싶다면
{ $addToSet: { 필드: { $each: 배열 } } }
$position
- 역시 $push를 보조하는 역할로 사용되고, $each와 함께 사용되어야 합니다.
- $push할 위치를 지정하는 역할을 합니다.
{ $push: { 필드: { $each: 배열, $position: 위치 } }
만약 기존에 [1, 2, 3]이 있고, $each로 추가할 배열이 [4, 5, 6]이며 $position이 0이면 [4, 5, 6, 1, 2, 3]이 됩니다.
만약 $position이 2면, [1, 2, 4, 5, 6, 3]이 됩니다.
Reference
https://www.zerocho.com/category/MongoDB/post/57a46d287c4a5115004e97eb
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.