[CS] MongoDB CRUD(Update, Delete) Day-53

cptkuk91·2022년 1월 28일
0

CS

목록 보기
89/139

Update

  • db.(컬렉션이름).updateOne();
  • db.(컬렉션이름).updateMany();

연산자

  • $inc
  • $set
  • $push

updateOne

주어진 기준에 맞는 다수의 Document 중 첫번째 Document 하나만 업데이트

findOne을 사용해 쿼리문에 맞는 첫 번째 Document를 리턴하는 예시와 같이 updateOne또한 주어진 기준에 맞는 다수의 Document가 있을 때 첫 번째 Document 하나를 업데이트 합니다.


updateMany

쿼리문과 일치하는 모든 Document 업데이트

ex) 예시

db.zips.updateMany({"city": "ALPINE"}, {"$inc": {"pop":10}})
// 업데이트 할 Document는 {"city":"ALPINE"}이고 모든 값을 10씩 증가시키겠다는 뜻입니다.

작업에 대한 응답을 살펴보기 위해서는 matchedCount와 modifiedCount로 나뉩니다.

  • matchedCount: 조건을 충족하는 Document의 수를 의미합니다.
  • modifiedCount: $inc를 통해 수정된 Document의 수를 의미합니다.

matchedCount와 modifiedCount가 동일한 값으로 출력됐고, 이를 통해 성공적으로 업데이트 된 것을 확인할 수 있습니다.

$inc 대신 $set 연산자 사용

$set 연산자를 사용하면 편리하게 지정된 값을 업데이트 할 수 있습니다.

ex) 예시

db.zips.updateOne({"zip": "12534"}, {"$set": {"pop": 6235}})

updateOne도 updateMany와 동일한 방식으로 작동합니다.

필드를 잘못 입력한 경우

필드를 잘못입력하면 에러를 발생시킨다 생각 할 수도 있지만, mongoDB에서는 없는 필드를 입력해도 에러를 발생시키지 않고 새로운 필드를 만들어 데이터를 추가시켜버립니다.

(삭제 방법에 대해서는 DELETE 부분 참고)


$push

$push 연산자는 필드 값에 요소를 추가할 수 있습니다.

ex) 실제예시

db.grades.updateOne({"student_id": 250, "class_id": 339}, {"$push":{"scores":{"type":"extra credit", "score":100}}});

grades라는 collection 내 student_id, class_id라는 업데이트할 Document 조건을 입력해주고, $push 연산자를 통해서 scores라는 필드안에 추가할 Sub Document를 입력해준다.


Delete

  • db.컬렉션이름.deleteOne()
  • db.컬렉션이름.deleteMany()
  • db.컬렉션이름.drop()

deleteOne

주어진 기준에 맞는 다수의 Document 중 첫번째 Document 하나를 삭제

주의사항: deleteOne을 사용할 경우 다수의 Document가 존재할 때, 의도하지 않은 Document가 삭제될 수 있습니다. 따라서 deleteOne()을 사용하는 경우 반드시 _id 값으로 쿼리해온 Document를 삭제하는 것이 좋습니다.

ex) 실제 예시

db.inspection.deleteOne({"id": "fordeleting"})

{"id": "fordeleting"}을 가지는 Document를 삭제할 수 있습니다.
입력 후 deleteCount에 1이 출력된다면 정상적으로 삭제됐음을 알 수 있습니다.


deleteMany

쿼리문과 일치하는 모든 Document를 삭제

기준을 충족하는 Document가 다수 존재할 경우 deleteMany()를 사용하여 Document를 삭제할 수도 있습니다.

ex) 실제 예시

db.inspection.deleteMany({"test": "1"})

inspection이라는 collection에서 deleteMany()명령어를 활용해 "test": "1" 이라는 값을 모두 삭제했다.


컬렉션을 삭제하는 drop명령어

컬렉션을 삭제하기 위해서는 drop 이라는 명령어를 사용해야 합니다.

ex) 실제 예시

db.컬렉션이름.drop()

잘못 생성된 collection이 있을 경우 삭제하면 됩니다.

ex) inspection이라는 collection이 잘못 만들어진 경우

db.inspection.drop()

결과 값으로 true를 반환하는 경우 inspection collection이 삭제 됐음을 알 수 있습니다.


mongoDB 상식

  • _id 값 없이 Document가 삽입되면, 자동적으로 고유한 _id 값이 Document 안에 생성된다.

  • mongoDB에서는 _id 값이 다르면 다른 Document로 여겨 필드와 값이 같은 Document가 존재하더라도 같은 Collection 내부에 새로운 Document 추가가 가능하다.

  • mongoDB에서는 각 Document가 고유한 _id 값을 가지고, 같은 _id값으로 저장하려고 한다면 저장되지 않는다.

  • Collection 삭제를 위한 drop() 명령어

db.컬렉션이름.drop()

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글