아카이브/MongoDB

[MongoDB] Document 수정하기

kaaay 2021. 12. 19. 22:13
728x90

 

db.collection.update()

Document를 수정할 때 사용한다.
Collection 안의 document를 수정한다. 특정 field를 수정할 수도 있고, 이미 존재하는 document를 대체 (replace)할 수도 있다. 기본 옵션으로는 단 하나의 document를 수정한다.
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>, // Added in MongoDB 4.2
     let: <document> // Added in MongoDB 5.0
   }
)

 

Parameter Type Mendatory Description
query document O 업데이트 할 document의 criteria를 정한다. find() 메소드에서 사용하는 query와 같다.
update document O document에 적용할 변동사항.
upsert boolean X 이 값이 true로 설정되면 query 한 document가 없을 경우, 새로운 document를 추가한다. (기본값 false)
multi boolean X 이 값이 true로 설정되면, 여러 개의 document를 수정한다. (기본값 false)

 

참고: https://docs.mongodb.com/manual/reference/method/db.collection.update/

 

db.collection.update() — MongoDB Manual

Docs Home → MongoDB Manualdb.collection.update(query, update, options)Modifies an existing document or documents in a collection. The method can modify specific fields of an existing document or documents or replace an existing document entirely, dependi

docs.mongodb.com

 

[Sample Data 추가하기] 

db.people.insert([
     { name: "Albert", age: 19 },
     { name: "Betty", age: 20 },
     { name: "Charlie", age: 23, skills: [ "mongodb", "nodejs"] },
     { name: "David", age: 23, score: 20 }
])

 

1. 특정 field 업데이트: Albert document의 age를 20으로 변경하기

db.people.update({name: "Albert"}, {$set: {age: 20}})

 

2. document를 replace: Betty document를 새로운 document로 대체하기

db.people.update({ name: "Betty"}, { name: "Betty 2nd", age: 10 })
  • 새로운 document로 replace할 때 _id는 바뀌지 않는다.

 

3. 특정 field 제거하기: David document의 score field 제거하기

db.people.update({ name: "David"}, { $unset: { score: 1}})

 

4. criteria에 해당되는 document가 존재하지 않으면 새로 추가하기: Elly document가 존재하지 않으면 새로 추가

db.people.update({ name: "Elly" }, { name: "Elly", age: 17 }, { upsert: true })

 

5. 여러 document의 특정 field 수정하기: age가 20 이하인 document의 score를 10으로 설정하기

db.people.update(
	{ age: { $lte: 20 } },
    { $set: { score: 10 } },
    { multi: true }
)

 

6. 배열에 값 추가하기: Charlie document의 skills 배열에 angularjs 추가하기

db.people.update(
	{ name: "Charlie" },
    { $push: { skills: "angularjs" } }
)

 

7. 배열에 값 여러 개 추가하고 오름차순으로 정렬하기: Charlie document의 skills 에 c++, java를 추가하고 알파벳순으로 정렬하기

db.people.update(
	{ name: "Charlie" },
	{ $push: { skills: { $each: [ "c++", "java"], $sort: 1 }}}
)

 

8. 배열에서 값 제거하기: Charlie document에서 skills 값의 mongodb 제거

db.people.update(
	{ name: "Charlie"},
    { $pull: { skills: "mongodb" } }
)

 

9. 배열에서 값 여러 개 제거하기: Charlie document에서 skills 배열 중 angularjs 와 java 제거

db.people.update(
	{ name: "Charlie" },
	{ $pull: { skills: { $in: ["angularjs", "java" ] } } }
)

 

참고: https://docs.mongodb.com/v3.2/reference/operator/update/

 

Update Operators — MongoDB Manual

Navigation This version of the documentation is archived and no longer supported. Reference > Operators > Update Operators Update Operators On this page The following modifiers are available for use in update operations; e.g. in db.collection.update() and

docs.mongodb.com

 

✔ Velopert MongoDB 강좌 (https://velopert.com/545) 를 학습한 후 정리한 포스팅 입니다.