$sort
$sort
$sort
수정자는$push
연산 중에 배열의 요소를 정렬합니다.$sort
수정자를 사용하려면$each
수정자와 함께 표시되어야 합니다. 빈 배열[]
을$each
수정자에 전달하여$sort
수정자만 효과를 갖도록 할 수 있습니다.{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $sort: <sort specification> } } } <sort specification>
의 경우:문서가 아닌 배열 요소를 정렬하거나 배열 요소가 문서인 경우 전체 문서를 기준으로 정렬하려면 오름차순에는
1
을, 내림차순에는-1
을 지정합니다.배열 요소가 문서인 경우 문서의 필드를 기준으로 정렬하려면 필드와 방향(예:
{ field: 1 }
또는{ field: -1 }
)이 있는 정렬 문서를 지정합니다. 정렬 사양에서 포함하는 배열 필드를 참고 하지 마세요.(예:{ "arrayField.field": 1 }
은 올바르지 않습니다)
행동
MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.
$sort
수정자는 문서가 아닌 배열 요소를 정렬할 수 있습니다. 이전 버전에서는 $sort
수정자를 사용하려면 배열 요소가 문서여야 했습니다.
배열 요소가 문서인 경우 수정자는 전체 문서 또는 문서의 특정 필드를 기준으로 정렬할 수 있습니다. 이전 버전에서는 $sort
수정자는 문서의 특정 필드별로만 정렬할 수 있었습니다.
$each
수정자 없이 $sort
수정자를 사용하려고 하면 오류가 발생합니다. $sort
에는 더 이상 $slice
수정자가 필요하지 않습니다. $push
에 사용할 수 있는 수정자 목록은 수정자를 참조하세요.
예시
문서의 필드를 기준으로 문서 배열 정렬하기
students
컬렉션을 생성합니다.
db.students.insertOne( { "_id": 1, "quizzes": [ { "id" : 1, "score" : 6 }, { "id" : 2, "score" : 9 } ] } )
다음 업데이트는 추가 문서를 quizzes
배열에 추가한 다음 score
필드의 오름차순으로 배열의 모든 요소를 정렬합니다.
db.students.updateOne( { _id: 1 }, { $push: { quizzes: { $each: [ { id: 3, score: 8 }, { id: 4, score: 7 }, { id: 5, score: 6 } ], $sort: { score: 1 } } } } )
중요
정렬 문서는 문서의 필드를 직접 참고하고 포함하는 배열 필드 quizzes
를 참조하지 않습니다. 즉, { "quizzes.score": 1}
가 아닌 { score: 1 }
을 사용합니다.
업데이트 후 배열 요소는 score
필드의 오름차순으로 정렬됩니다.
{ "_id" : 1, "quizzes" : [ { "id" : 1, "score" : 6 }, { "id" : 5, "score" : 6 }, { "id" : 4, "score" : 7 }, { "id" : 3, "score" : 8 }, { "id" : 2, "score" : 9 } ] }
문서가 아닌 배열 요소 정렬
다음 문서를 students
컬렉션에 추가합니다:
db.students.insertOne( { "_id" : 2, "tests" : [ 89, 70, 89, 50 ] } )
다음 작업은 tests
배열에 두 개의 요소를 더 추가하고 요소를 정렬합니다.
db.students.updateOne( { _id: 2 }, { $push: { tests: { $each: [ 40, 60 ], $sort: 1 } } } )
업데이트된 문서에는 tests
배열의 요소가 오름차순으로 나열되어 있습니다.
{ "_id" : 2, "tests" : [ 40, 50, 60, 70, 89, 89 ] }
정렬만 사용하여 배열 업데이트
다음 문서를 students
컬렉션에 추가합니다:
db.students.insertOne( { "_id" : 3, "tests" : [ 89, 70, 100, 20 ] } )
요소를 내림차순으로 정렬하도록 tests
필드를 업데이트하려면 { $sort: -1 }
지정하고 $each
수정자에 대해 빈 배열 []
을 지정합니다. 예시:
db.students.updateOne( { _id: 3 }, { $push: { tests: { $each: [ ], $sort: -1 } } } )
이 예에서는 tests
필드 값을 내림차순으로 정렬합니다.
{ "_id" : 3, "tests" : [ 100, 89, 70, 20 ] }
$sort
다른 $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
수정자,$sort
수정자는 수정된quizzes
배열의 모든 요소를score
필드에 따라 내림차순으로 정렬합니다.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 } ] }
쿼리의 수정자 순서는 수정자가 적용되는 순서를 변경하지 않습니다. 자세한 내용은 수정자를 참조하세요.