Document 수정
update() 메소드
MongoDB에서는 update() 메소드를 통하여 데이터를 수정 할 수 있다.
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
- Collection 안의 document(들)을 수정한다. 이 메소드를 통하여 특정 field 를 수정 할 수도 있고 이미 존재하는 document를 대체(replace) 할 수도 있다.
- update() 메소드의 기본 옵션으로는 단 하나의 document를 수정한다.
*query | document | 업데이트 할 document의 criteria 를 정합니다. find() 메소드 에서 사용하는 query 와 같다. |
*update | document | document에 적용할 변동사항이다. |
upsert | boolean | Optional. (기본값: false) 이 값이 true 로 설정되면 query한 document가 없을 경우, 새로운 document를 추가한다. |
multi | boolean | Optional. (기본값: false) 이 값이 true 로 설정되면, 여러개의 document 를 수정한다. |
writeConcern | document | Optional. wtimeout 등 document 업데이트 할 때 필요한 설정값입니다. 기본 writeConcern을 사용하려면 이 파라미터를 생략해라. |
예제 실습
실습을 위한 데이터를 추가하기
db.people.insert([{ name: "Abet", age: 19 },
... { name: "Betty", age: 20 },
... { name: "Charlie", age: 23, skills: [ "mongodb", "nodejs"] },
... { name: "David", age: 23, score: 20 }
... ])
Abet document 의 age를 20으로 변경한다
> db.people.update( { name: "Abet" }, { $set: { age: 20 } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
특정 field의 값을 수정할 땐 $set 연산자를 사용한다. 이 연산자를 사용해서 똑같은 방법을 새로운 field를 추가 할 수도 있다.
Betty document를 새로운 document로 대체한다.
> db.people.update( { name: "Betty" }, { "name": "Betty 2nd", age: 1 })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
이렇게 새로운 document 로 replace 할 때, _id는 바뀌지 않는다.
David document의 score field를 제거한다
> db.people.update( { name: "David" }, { $unset: { score: 1 } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
여기서 score: 1 의 1 은 true 의 의미입니다.
criteria에 해당되는 document가 존재하지 않는다면 새로 추가하기
> db.people.update( { name: "Elly" }, { name: "Elly", age: 17 }, { upsert: true } )
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("56c893ffc694e4e7c8594240")
})
upsert 옵션을 설정하여 Elly document가 존재하지 않으면 새로 추가
여러 document의 특정 field를 수정하기
> db.people.update(
... { age: { $lte: 20 } },
... { $set: { score: 10 } },
... { multi: true }
... )
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 0 })
age가 20 보다 낮거나 같은 document의 score를 10으로 설정
배열 에 값 추가하기
> db.people.update(
... { name: "Charlie" },
... { $push: { skills: "angularjs" } }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Charlie document의 skills 배열에 "angularjs" 추가
배열에 값 여러개 추가하기 + 오름차순으로 정렬하기
> db.people.update(
... { name: "Charlie" },
... { $push: {
... skills: {
... $each: [ "c++", "java" ],
... $sort: 1
... }
... }
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Charlie document의 skills에 "c++" 와 "java" 를 추가하고 알파벳순으로 정렬
$sort 값을 내림차순으로 정렬하려면 -1 로 하면 된다.
배열이 document의 배열이고 그 embedded document의 특정 field에 따라서 정렬을 할 때는 다음과 같이 설정하면 된다.
$sort: { KEY: 1 }
배열에 값 제거하기
> db.people.update(
... { name: "Charlie" },
... { $pull: { skills: "mongodb" } }
... )
Charlie document에서 skills 값의 mongodb 제거
배열에서 값 여러개 제거하기
> db.people.update(
... { name: "Charlie" },
... { $pull: { skills: { $in: ["angularjs", "java" ] } } }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Charlie document에서 skills 배열 중 "angularjs" 와 "java" 제거
'프로그래밍 개발 > DB' 카테고리의 다른 글
MongoDB - Index (0) | 2021.01.20 |
---|---|
MongoDB - Document Query(조회) 2 (0) | 2021.01.18 |
MongoDB - Document Query(조회) (0) | 2021.01.18 |
MongoDB - 생성 및 제거하기 (0) | 2021.01.15 |
MongoDB - 기본 설치 및 개념 (0) | 2021.01.14 |
댓글