MongoDB 데이터 일괄 업데이트 및 삭제방법

mongoDB atlas를 이용해서 사이트를 운영중이다. 무료로 mongoDB 클라우드 서버를 사용할 수 있는데 아주 작은 사이즈의 데이터량을 사용하는 나한테는 충분한 용량과 성능이다. 아래 그림에서 각 티어별로 부과되는 금액과 스펙차이를 볼 수 있고, 무료인 M0는 512MB의 용량을 제공한다. 최근에 mongoDB로 저장한 데이터중 일부 코드를 일괄 변경할 일이 생겨서, 방법 찾아보고 처리한 내용을 정리해본다.

mongoDB 접속하기

mongoDB 사이트에 접속해서 관리페이지에 들어가면 아래와 같이 connect 버튼을 눌러 접속방법을 확인할 수 있다.

connect 버튼을 누르면, 아래와 같이 접속정보가 뜨는데, 본인이 설정한 database 이름과, username 을 설정해야 한다. 아래에 있는 myFirstDatabse 부분과, <username> 이부분을 변경해야 한다.

당연히 mongoDB 가 본인pc에 설치되어 있다는 가정하에, mongosh 명령어로 접근하면, mongoDB 클라우드에 접근이 가능하다. 중요부분은 ***** 로 가려져있으니, 본인 설정에 맞춰서 변경해야 한다.

> mongosh "mongodb+srv://*****.mongodb.net/test" 
    --apiVersion 1 --username ******

Enter password: *************
Current Mongosh Log ID:	*****
Connecting to:		mongodb+srv://*****.mongodb.net/****
Using MongoDB:		5.0.14 (API Version 1)
Using Mongosh:		1.0.5

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

Atlas atlas-******-shard-0 [primary] test>

mongoDB 일괄 업데이트 하기

우선 find 함수로 update 할 대상을 미리 조회해본다.

db.classEvent.find({ classCount : '9' });

9라는 코드를 A로 모두 바꿀 예정이다. 변경할 대상이 많은 경우는, updateMany 함수를 사용하며 첫번째 인자에는 변경할 대상의 조건을 입력하고, 두번째 인자에는 변경할 컬럼과 데이터를 입력한다. $set 을 사용하면 기존에 있던 모든 필드는 그대로 두고, 특정 필드의 값을 변경할 수 있다.

db.classEvent.updateMany(
	{ classCount : '9' },
	{ $set: { classCount : 'A'} }
);

mongoDB objectId 기준으로 삭제

추가로, 데이터를 적재할마다 생기는 기본적인 objectId 는 아주 중요한 키가 되는데, 그 값을 기준으로 조회하거나 삭제할때는 ObjectId 함수를 사용해야 한다. 아래 명령어를 참고한다.

db.member.find({ _id: ObjectId("62204123251c49af27b") })
db.member.deleteOne({ _id: ObjectId("62204123251c49af27b") })

더 보면 좋을 글들