Docs Menu
Docs Home
/ /
λ°°μ—΄

$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 ] }

λ‹€μŒ λ¬Έμ„œλ₯Ό 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

이 νŽ˜μ΄μ§€μ˜ λ‚΄μš©