$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 } ] }
쿼리μ μμ μ μμλ μμ μκ° μ μ©λλ μμλ₯Ό λ³κ²½νμ§ μμ΅λλ€. μμΈν λ΄μ©μ μμ μλ₯Ό μ°Έμ‘°νμΈμ.