문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

$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 수정자가 문서의 특정 필드로만 정렬할 수 있었습니다.

수정자 없이 수정자를 $sort 사용하려고 $each 하면 오류가 발생합니다.$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 ] }

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

쿼리의 수정자 순서는 수정자가 적용되는 순서를 변경하지 않습니다. 자세한 내용은 수정자를 참조하세요.

← $slice

이 페이지의 내용