Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$push (업데이트 연산자)

$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 항목이 생성되지 않습니다(즉, 작업이 작동하지 않음을 의미합니다).

$push 연산자를 다음 수정자와 함께 사용할 수 있습니다:

Modifier
설명

배열 필드에 여러 값을 추가합니다.

배열 요소의 수를 제한합니다. $each 수정자를 사용해야 합니다.

배열의 요소를 정렬합니다. $each 수정자를 사용해야 합니다.

새 요소를 삽입할 배열 의 위치 지정합니다. 수정자를 사용해야 $each 합니다. $position 수정자가 없으면 은 배열 의 끝에 요소를 $push 추가합니다.

수정자와 함께 사용할 경우 $push 연산자는 다음과 같은 형식을 갖습니다.

{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }

수정자가 사용한 $push 연산 처리는 수정자가 표시되는 순서에 관계없이 다음 순서로 이루어집니다.

  1. 배열을 업데이트하여 올바른 위치에 요소를 추가합니다.

  2. 지정한 경우 정렬을 적용합니다.

  3. 지정한 경우 배열을 슬라이스합니다.

  4. 배열을 저장합니다.

이 페이지의 예시에서는 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
}

다음 문서를 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 }
]
}

돌아가기

$pull

이 페이지의 내용