μ μ
$[]μ 체 μμΉ μ°μ°μ
$[]μ(λ) μ λ°μ΄νΈ μ°μ°μκ° μ§μ λ λ°°μ΄ νλμ λͺ¨λ μμλ₯Ό μμ ν΄μΌ ν¨μ λνλ λλ€.$[]μ°μ°μμ νμμ λ€μκ³Ό κ°μ΅λλ€.{ <update operator>: { "<array>.$[]" : value } } μ λ°μ΄νΈ μμ μμ μλ₯Ό λ€μ΄
db.collection.updateOne()λ°db.collection.findAndModify()λ₯Ό μ¬μ©νμ¬ μΏΌλ¦¬ 쑰건과 μΌμΉνλ λ¬Έμμ λν λͺ¨λ λ°°μ΄ μμλ₯Ό μμ ν©λλ€. μμ:db.collection.updateOne( { <query conditions> }, { <update operator>: { "<array>.$[]" : value } } ) μμλ λ°°μ΄μ λͺ¨λ μμ μ λ°μ΄νΈλ₯Ό μ°Έμ‘°νμΈμ.
νλ
MongoDB 5.0λΆν° μ λ°μ΄νΈ μ°μ°μλ λ¬Έμμ΄ κΈ°λ° μ΄λ¦μ΄ μλ λ¬Έμ νλλ₯Ό μ¬μ μμΌλ‘ μ²λ¦¬ν©λλ€. μ«μ μ΄λ¦μ΄ μλ νλλ μ«μ μμλλ‘ μ²λ¦¬λ©λλ€. μμΈν λ΄μ©μ μ λ°μ΄νΈ μ΄μμ λμμ μ°Έμ‘°νμμμ€.
upsert
μ
μνΈ μ°μ°μΌλ‘ μΈν΄ μ½μ
μ΄ λ°μνλ κ²½μ° μ
λ°μ΄νΈ λ¬Έμμ $[] μμΉ μ°μ°μλ₯Ό μ¬μ©νλ €λ©΄ query μ λ°°μ΄ νλμ μ νν μΌμΉνλ νλͺ©μ΄ ν¬ν¨λμ΄μΌ ν©λλ€.
μλ₯Ό λ€μ΄, $[] λ¬Έμμμ μ
μνΈ μμ
μ λ°°μ΄ νλμ μ νν λλ±μ± λ§€μΉ μ‘°κ±΄μ μ§μ ν©λλ€.
db.collection.updateOne( { myArray: [ 5, 8 ] }, { $set: { "myArray.$[]": 10 } }, { upsert: true } )
ν΄λΉ λ¬Έμκ° μλ κ²½μ° μμ μ μννλ©΄ λ€μ λ¬Έμκ° μ½μ λ©λλ€.
{ "_id" : ObjectId(...), "myArray" : [ 10, 10 ] }
μ μνΈ μμ μ μ νν μΌμΉνλ λ΄μ©μ΄ ν¬ν¨λμ΄ μμ§ μκ³ μ λ°μ΄νΈν μΌμΉνλ λ¬Έμλ₯Ό μ°Ύμ§ λͺ»ν κ²½μ° μ μνΈ μμ μ μ€λ₯κ° λ°μν©λλ€.
μλ₯Ό λ€μ΄ μ λ°μ΄νΈν μΌμΉνλ λ¬Έμκ° μμΌλ©΄ λ€μ μμ μμ μ€λ₯κ° λ°μν©λλ€.
db.emptyCollection.updateOne( { }, { $set: { "myArray.$[]": 10 } }, { upsert: true } ) db.emptyCollection.updateOne( { myArray: 5 }, { $set: { "myArray.$[]": 10 } }, { upsert: true } )
μ€μ²© λ°°μ΄
$[] μ°μ°μλ λ μ΄μμ λ°°μ΄κ³Ό μ€μ²© λ°°μ΄μ μννλ 쿼리μ μ¬μ©ν μ μμ΅λλ€.
μμλ $[<identifier>]μ ν¨κ» μ€μ²© λ°°μ΄ μ
λ°μ΄νΈλ₯Ό μ°Έμ‘°νμΈμ.
μμ
λ°°μ΄μ λͺ¨λ μμ μ λ°μ΄νΈ
students 컬λ μ
μ μμ±ν©λλ€.
db.students.insertMany( [ { "_id" : 1, "grades" : [ 85, 82, 80 ] }, { "_id" : 2, "grades" : [ 88, 90, 92 ] }, { "_id" : 3, "grades" : [ 85, 100, 90 ] } ] )
컬λ μ
μ λͺ¨λ λ¬Έμμ λν΄ grades λ°°μ΄μ λͺ¨λ μμλ₯Ό 10 λ§νΌ μ¦κ°μν€λ €λ©΄ μ 체 μμΉ $[] μ°μ°μλ₯Ό μ¬μ©ν©λλ€.
db.students.updateMany( { }, { $inc: { "grades.$[]": 10 } }, )
λͺ¨λ μμΉ $[] μ°μ°μλ λ°°μ΄ νλμ λͺ¨λ μμμ λν μ리 νμμ μν μ ν©λλ€.
μμ
ν students 컬λ μ
μλ λ€μ λ¬Έμκ° ν¬ν¨λ©λλ€.
{ "_id" : 1, "grades" : [ 95, 92, 90 ] } { "_id" : 2, "grades" : [ 98, 100, 102 ] } { "_id" : 3, "grades" : [ 95, 110, 100 ] }
λ°°μ΄μ λͺ¨λ λ¬Έμ μ λ°μ΄νΈ
$[] μμΉ μ°μ°μλ λ΄μ₯λ λ¬Έμλ₯Ό ν¬ν¨ν λ°°μ΄μ κ°νΈνκ² μ
λ°μ΄νΈν μ μμ΅λλ€. ν¬ν¨λ λ¬Έμμ νλμ μ‘μΈμ€νλ €λ©΄ $[] μ°μ°μμ ν¨κ» μ νκΈ°λ²μ μ¬μ©ν©λλ€.
db.collection.updateOne( { <query selector> }, { <update operator>: { "array.$[].field" : value } } )
students2 컬λ μ
μ μμ±ν©λλ€.
db.students2.insertMany( [ { "_id" : 1, "grades" : [ { "grade" : 80, "mean" : 75, "std" : 8 }, { "grade" : 85, "mean" : 90, "std" : 6 }, { "grade" : 85, "mean" : 85, "std" : 8 } ] }, { "_id" : 2, "grades" : [ { "grade" : 90, "mean" : 75, "std" : 8 }, { "grade" : 87, "mean" : 90, "std" : 5 }, { "grade" : 85, "mean" : 85, "std" : 6 } ] } ] )
grades λ°°μ΄μ λͺ¨λ μμμ λν std νλ κ°μ μμ νλ €λ©΄ μμΉ $[] μ°μ°μλ₯Ό μ¬μ©νμΈμ.
db.students2.updateMany( { }, { $inc: { "grades.$[].std" : -2 } }, )
μμ ν 컬λ μ μλ λ€μ λ¬Έμκ° ν¬ν¨λ©λλ€.
{ "_id" : 1, "grades" : [ { "grade" : 80, "mean" : 75, "std" : 6 }, { "grade" : 85, "mean" : 90, "std" : 4 }, { "grade" : 85, "mean" : 85, "std" : 6 } ] } { "_id" : 2, "grades" : [ { "grade" : 90, "mean" : 75, "std" : 6 }, { "grade" : 87, "mean" : 90, "std" : 3 }, { "grade" : 85, "mean" : 85, "std" : 4 } ] }
λΆμ 쿼리 μ°μ°μλ₯Ό μ¬μ©νμ¬ μ§μ λ λ°°μ΄ μ λ°μ΄νΈ
results 컬λ μ
μ μμ±ν©λλ€.
db.results.insertMany( [ { "_id" : 1, "grades" : [ 85, 82, 80 ] }, { "_id" : 2, "grades" : [ 88, 90, 92 ] }, { "_id" : 3, "grades" : [ 85, 100, 90 ] } ] )
grades λ°°μ΄μμ κ°μ΄ 100μΈ λ¬Έμλ₯Ό μ μΈν λͺ¨λ λ¬Έμμ λν΄ grades λ°°μ΄μ λͺ¨λ μμλ₯Ό 10μ© μ¦κ°μν€λ €λ©΄ λͺ¨λ μμΉ $[] μ°μ°μλ₯Ό μ¬μ©ν©λλ€.
db.results.updateMany( { "grades" : { $ne: 100 } }, { $inc: { "grades.$[]": 10 } }, )
λͺ¨λ μμΉ $[] μ°μ°μλ λ°°μ΄ νλμ λͺ¨λ μμμ λν μ리 νμμ μν μ ν©λλ€.
μμ
ν students 컬λ μ
μλ λ€μ λ¬Έμκ° ν¬ν¨λ©λλ€.
{ "_id" : 1, "grades" : [ 95, 92, 90 ] } { "_id" : 2, "grades" : [ 98, 100, 102 ] } { "_id" : 3, "grades" : [ 85, 100, 90 ] }
λ€μκ³Ό ν¨κ» μ€μ²© λ°°μ΄μ μ
λ°μ΄νΈν©λλ€. $[<identifier>]
νν° $[<identifier>] μμΉ μ°μ°μμ ν¨κ» $[] μμΉ μ°μ°μλ₯Ό μ¬μ©νμ¬ μ€μ²©λ λ°°μ΄μ μ
λ°μ΄νΈν μ μμ΅λλ€.
λ€μ λ¬Έμλ₯Ό μ¬μ©νμ¬ μ»¬λ μ
students3λ₯Ό μμ±ν©λλ€.
db.students3.insertMany( [ { "_id" : 1, "grades" : [ { type: "quiz", questions: [ 10, 8, 5 ] }, { type: "quiz", questions: [ 8, 9, 6 ] }, { type: "hw", questions: [ 5, 4, 3 ] }, { type: "exam", questions: [ 25, 10, 23, 0 ] }, ] } ] )
type μ κ΄κ³μμ΄ μ€μ²©λ grades.questions λ°°μ΄μμ 8 λ³΄λ€ ν¬κ±°λ κ°μ λͺ¨λ κ°μ μ
λ°μ΄νΈνλ €λ©΄ λ€μμ μννμΈμ.
db.students3.updateMany( {}, { $inc: { "grades.$[].questions.$[score]": 2 } }, { arrayFilters: [ { "score": { $gte: 8 } } ] } )
μ λ°μ΄νΈλ λ¬Έμλ λ€μκ³Ό κ°μ΅λλ€:
{ _id: 1, grades: [ { type: 'quiz', questions: [ 12, 10, 5 ] }, { type: 'quiz', questions: [ 10, 11, 6 ] }, { type: 'hw', questions: [ 5, 4, 3 ] }, { type: 'exam', questions: [ 27, 12, 25, 0 ] } ] }