정의
$push$push연산자는 지정된 값을 배열에 추가합니다.
호환성
다음 환경에서 호스팅되는 배포에 $push 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$push 연산자의 형식은 다음과 같습니다.
{ $push: { <field1>: <value1>, ... } }
내장된 문서나 배열에 <field> 기호를 지정하려면 점 표기법을사용하십시오.
행동
MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.
업데이트할 문서에 필드가 없는 경우 $push는 값이 있는 배열 필드를 해당 요소로 추가합니다.
필드 배열 아닌 경우 작업이 실패합니다.
값이 배열 인 경우$push는 전체 배열 단일 요소로 추가합니다. 값의 각 요소를 개별적으로 추가하려면$each수정자를$push과 함께 사용합니다. 예시 는 배열에 여러 값 추가하기 항목을 참조하세요. $push에 사용할 수 있는 수정자 목록은 수정자를 참조하세요.
MongoDB 5.0부터 빈 피연산자 표현식( { } )과 함께 $push과 같은 업데이트 연산자를 사용할 때 mongod에서 더 이상 오류가 발생하지 않습니다. 업데이트가 비어 있으면 변경 사항이 없으며 oplog 항목이 생성되지 않습니다(즉, 작업이 작동하지 않음을 의미합니다).
Modifiers
$push 연산자를 다음 수정자와 함께 사용할 수 있습니다:
Modifier | 설명 |
|---|---|
배열 필드에 여러 값을 추가합니다. | |
배열 요소의 수를 제한합니다. | |
배열의 요소를 정렬합니다. | |
수정자와 함께 사용할 경우 $push 연산자는 다음과 같은 형식을 갖습니다.
{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }
수정자가 사용한 $push 연산 처리는 수정자가 표시되는 순서에 관계없이 다음 순서로 이루어집니다.
배열을 업데이트하여 올바른 위치에 요소를 추가합니다.
지정한 경우 정렬을 적용합니다.
지정한 경우 배열을 슬라이스합니다.
배열을 저장합니다.
예시
이 페이지의 예시에서는 sample_mflix 샘플 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예시를 실행 하려면 데이터베이스를 제거하고 다시 만들어야 할 수 있습니다.
배열에 값 추가하기
다음 예시 $push 연산자 사용하여 "Classic" 일치하는 genres 영화 문서 의 배열 에 를 추가합니다.
db.movies.updateOne( { title: "The Dark Knight" }, { $push: { genres: "Classic" } } )
이 연산은 다음과 같은 결과를 반환합니다.
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 }
여러 문서의 배열에 값 추가
다음 예시 $push 연산자 사용하여 "Acclaimed" genres 일치하는 모든 영화 문서의 배열 에 를 추가합니다.
db.movies.updateMany( { "imdb.rating": { $gt: 9 } }, { $push: { genres: "Acclaimed" } } )
이 연산은 다음과 같은 결과를 반환합니다.
{ acknowledged: true, insertedId: null, matchedCount: '...', modifiedCount: '...', upsertedCount: 0 }
배열에 여러 값 추가하기
$push와 $each 수정자를 함께 사용하면 배열 필드에 여러 값을 추가할 수 있습니다.
db.movies.updateOne( { title: "The Dark Knight" }, { $push: { genres: { $each: [ "Modern Classic", "Award-Winning" ] } } } )
이 연산은 다음과 같은 결과를 반환합니다.
{ acknowledged: true, insertedId: null, matchedCount: 1, modifiedCount: 1, upsertedCount: 0 }
여러 수정자와 함께 $push 연산자 사용
다음 문서를 students 컬렉션에 추가합니다:
db.students.insertOne( { "_id" : 5, "quizzes" : [ { "wk": 1, "score" : 10 }, { "wk": 2, "score" : 8 }, { "wk": 3, "score" : 5 }, { "wk": 4, "score" : 6 } ] } )
이어지는 $push 작업에서는 다음을 사용합니다.
quizzes배열에 여러 문서를 추가하는$each수정자,수정된
quizzes배열의 모든 요소를score필드를 기준으로 내림차순으로 정렬하는$sort수정자, 그리고quizzes배열의 처음 3개의 정렬된 요소만 유지하기 위해 사용하는$slice수정자.
db.students.updateOne( { _id: 5 }, { $push: { quizzes: { $each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ], $sort: { score: -1 }, $slice: 3 } } } )
작업 후에는 가장 높은 점수를 받은 세 개의 퀴즈만 배열에 표시됩니다:
{ "_id" : 5, "quizzes" : [ { "wk" : 1, "score" : 10 }, { "wk" : 2, "score" : 8 }, { "wk" : 5, "score" : 8 } ] }