심심한 개발자의 취미생활

Document수정 - update()

정의

  • MongoDB에서는 update() 메소드를 통하여 데이터를 수정 할 수 있습니다.
  • 예시)
db.collection.update(
    <query>,
    <update>,
    {
        upsert: <boolean>,
        multi: <boolean>,
        writeConsern: <document>
    }
)

update()

// 특정 field 업데이트 하기
> db.tempCol.update({name: "Abet"}, {$set: {age:20}})
// 특정 field의 값을 수정 할 떈 $set 연산자를 사용합니다.
// 이 연산자를 사용해서 똑같은 방법을 새로운 field를 추가 할 수도 있습니다.

// document를 replace하기
> db.tempCol.update({name: "Betty"}, {name: "Betty 2nd", age: 1})
// 새로운 document로 replace할 때는 _id값은 바뀌지 않습니다.

// 특정 field를 제거하기 : David document의 score field 제거
> db.tempCol.update({name: "David"}, {$unset: {score:1}})

// criteria에 해당되는 document가 존재하지 않는다면 새로 추가하기
// upsert 옵션을 설정하여 Elly document가 존재하지 않으면 새로 추가
> db.tempCol.update({name: "Elly"}, {name: "Elly", age:17}, {upsert: true})

// 여러 document의 특정 field를 수정하기
// age가 20보다 낮거나 같은 document의 score를 10으로 수정
> db.tempCol.update(
    {age: {$lte: 20}},
    {$set: {score: 10}},
    {multi: true}
)

// 배열에 값 추가하기
// Charlie document의 skills배열에 "reactjs" 추가
> db.tempCol.update(
    {name: "Charlie"},
    {$push: {skills: "reactjs"}}
)

// 배열에 값 여러개 추가하기 + 오름차순으로 정렬하기
> db.tempCol.update(
    {name: "Charlie"},
    {
        $push: {
            skills: {
                $each: ["c++", "java"],
                $sort: 1
            }
        }
    }
)
// $sort 값을 내림차순으로 정렬하려면 -1로 설정
// 배열이 document의 배열이고 그 embedded document의 특정 field에 따라서 정렬을 할 때는 다음과 같이 설정 하면 됩니다.
// $sort: {key:1}

// 배열에 값 제거하기
// Charlie document에서 skills 값의 mongodb 제거
> db.tempCol.update(
    {name: "Charlie"},
    {$pull: {skills: "mongodb"}}
)

// 배열에서 여러 값 제거하기
// Charlie document에서 skills 배열중 "reactjs"와 "java" 값 제거
> db.tempCol.update(
    {name:"Charlie"},
    {
        $pull: {skills: {$in: ["reactjs", "java"]}}
    }
)