Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / /

$push

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 행동
  • Modifiers
  • 예시
$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. 배열을 저장합니다.

students 컬렉션을 생성합니다.

db.students.insertOne( { _id: 1, scores: [ 44, 78, 38, 80 ] } )

다음 예시에서는 scores 배열에 89 을 추가합니다:

db.students.updateOne(
{ _id: 1 },
{ $push: { scores: 89 } }
)

출력 예시:

{ _id: 1, scores: [ 44, 78, 38, 80, 89 ] }

다음 문서를 students 컬렉션에 추가합니다:

db.students.insertMany( [
{ _id: 2, scores: [ 45, 78, 38, 80, 89 ] } ,
{ _id: 3, scores: [ 46, 78, 38, 80, 89 ] } ,
{ _id: 4, scores: [ 47, 78, 38, 80, 89 ] }
] )

다음 $push 작업은 각 문서의 scores 배열에 95를 추가합니다.

db.students.updateMany(
{ },
{ $push: { scores: 95 } }
)

scores 배열에 95이(가) 포함되어 있는지 확인하려면 다음 작업을 실행합니다:

db.students.find()

이 연산은 다음과 같은 결과를 반환합니다.

[
{ _id: 1, scores: [ 44, 78, 38, 80, 89, 95 ] },
{ _id: 2, scores: [ 45, 78, 38, 80, 89, 95 ] },
{ _id: 3, scores: [ 46, 78, 38, 80, 89, 95 ] },
{ _id: 4, scores: [ 47, 78, 38, 80, 89, 95 ] }
]

$push$each 수정자를 함께 사용하면 배열 필드에 여러 값을 추가할 수 있습니다.

다음 예시에서는 name 필드가 joe 인 문서의 scores 배열에 각 [ 90, 92, 85 ] 요소를 추가합니다.

db.students.updateOne(
{ name: "joe" },
{ $push: { scores: { $each: [ 90, 92, 85 ] } } }
)

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