$position
정의
$position
$position
수정자는$push
연산자가 요소를 삽입하는 배열의 위치를 지정합니다.$position
수정자가 없으면$push
연산자는 배열의 끝에 요소를 삽입합니다. 자세한 내용은 $push 수정자를 참조하세요.$position
수정자를 사용하려면$each
수정자와 함께 표시되어야 합니다.{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $position: <num> } } } <num>
는 0 기반의 배열 인덱스(위치)를 기준으로 배열 내 위치를 나타냅니다:음수가 아닌 숫자는 배열의 시작 부분부터 시작하여 배열의 위치에 해당합니다.
<num>
값이 배열 길이보다 크거나 같으면$position
수정자는 효과가 없으며$push
배열 끝에 요소를 추가합니다.음수는 배열의 마지막 요소부터 계산(포함하지 않음)하여 배열의 위치에 해당합니다. 예를 들어
-1
은 배열의 마지막 요소 바로 앞의 위치를 나타냅니다. 3} 배열에 여러 요소를 지정하는$each
경우 마지막으로 추가된 요소는 끝에서 지정된 위치에 있습니다.<num>
절대값이 배열의 길이보다 크거나 같은 경우$push
값은 배열의 시작 부분에 요소를 추가합니다.
행동
MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.
예시
배열의 시작 부분에 요소 추가하기
students
컬렉션을 생성합니다.
db.students.insertOne( { "_id" : 1, "scores" : [ 100 ] } )
다음 작업은 scores
필드를 업데이트하여 50
, 60
, 70
요소를 배열의 시작 부분에 추가합니다.
db.students.updateOne( { _id: 1 }, { $push: { scores: { $each: [ 50, 60, 70 ], $position: 0 } } } )
이 작업을 수행하면 다음과 같이 업데이트된 문서가 생성됩니다:
{ "_id" : 1, "scores" : [ 50, 60, 70, 100 ] }
배열 중간에 요소 추가하기
0} 컬렉션에 문서를 students
추가합니다:
db.students.insertOne( { "_id" : 2, "scores" : [ 50, 60, 70, 100 ] } )
다음 작업은 scores
필드를 업데이트하여 2
의 배열 인덱스(위치)에 20
및 30
요소를 추가합니다.
db.students.updateOne( { _id: 2 }, { $push: { scores: { $each: [ 20, 30 ], $position: 2 } } } )
이 작업을 수행하면 다음과 같이 업데이트된 문서가 생성됩니다:
{ "_id" : 2, "scores" : [ 50, 60, 20, 30, 70, 100 ] }
음수 배열 인덱스(위치)를 사용하여 배열에 요소 추가하기
$position
은 배열의 마지막 요소부터 계산하여 끝부터 시작하는 위치를 나타내는 음수 배열 인덱스(위치) 값을 사용할 수 있습니다(배열의 마지막 요소는 포함하지 않음). 예를 들어 -1
은 배열의 마지막 요소 바로 앞의 위치를 나타냅니다.
다음 문서를 students
컬렉션에 추가합니다:
db.students.insertOne( { "_id" : 3, "scores" : [ 50, 60, 20, 30, 70, 100 ] } )
다음 연산에서는 $position
에 -2
를 지정하여 마지막 요소 앞 두 자리 위치에 90
을 추가하고 마지막 요소 앞 두 자리 위치에 80
을 추가합니다.
중요
배열 인덱스 (위치) 가 음수인 경우 $each
배열에 여러 요소를 지정하면 마지막으로 추가한 요소가 끝부터 지정된 위치에 있습니다.
db.students.updateOne( { _id: 3 }, { $push: { scores: { $each: [ 90, 80 ], $position: -2 } } } )
이 작업을 수행하면 다음과 같이 업데이트된 문서가 생성됩니다:
{ "_id" : 3, "scores" : [ 50, 60, 20, 30, 90, 80, 70, 100 ] }