Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB 문서 업데이트 시 사용자 정의 변수를 활용하는 방법

MongoDB에서 문서를 업데이트할 때 update() 메서드와 함께 사용자 정의(custom) 변수를 활용하면 코드의 재사용성과 가독성을 높일 수 있습니다. 이 글에서는 변수를 선언하고 업데이트 쿼리에 적용하는 전체 과정을 예제와 함께 살펴보겠습니다.

기본 문법

먼저 변수를 선언한 뒤, update() 메서드의 $set 연산자에 해당 변수를 지정하는 기본 문법은 다음과 같습니다.

var anyVariableName = yourValue;
db.yourCollectionName.update({filter}, {$set:{yourFieldName: yourVariableName}});

예제 컬렉션 생성

실습을 위해 demo600이라는 컬렉션을 만들고 문서를 세 개 삽입해 보겠습니다.

> db.demo600.insertOne({id:1, Name:"Robert"});
{
   "acknowledged" : true, "insertedId" : ObjectId("5e94a063f5f1e70e134e2699")
}
> db.demo600.insertOne({id:2, Name:"Mike"});
{
   "acknowledged" : true, "insertedId" : ObjectId("5e94a06bf5f1e70e134e269a")
}
> db.demo600.insertOne({id:3, Name:"Sam"});
{
   "acknowledged" : true, "insertedId" : ObjectId("5e94a072f5f1e70e134e269b")
}

삽입된 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.demo600.find();

위 쿼리는 다음과 같은 출력을 생성합니다.

{ "_id" : ObjectId("5e94a063f5f1e70e134e2699"), "id" : 1, "Name" : "Robert" }
{ "_id" : ObjectId("5e94a06bf5f1e70e134e269a"), "id" : 2, "Name" : "Mike" }
{ "_id" : ObjectId("5e94a072f5f1e70e134e269b"), "id" : 3, "Name" : "Sam" }

사용자 정의 변수로 문서 업데이트하기

이제 변수 replaceName에 새 이름을 저장한 후, 이 변수를 활용해 id:2인 문서의 Name 필드를 변경해 보겠습니다.

> var replaceName="David";
> db.demo600.update({id:2},{$set:{Name:replaceName}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

WriteResult를 보면 조건에 일치한 문서가 1개(nMatched: 1)이고, 실제로 수정된 문서도 1개(nModified: 1)임을 확인할 수 있습니다.

업데이트 결과 확인하기

다시 find() 메서드로 전체 문서를 조회해 변경 사항을 확인합니다.

> db.demo600.find();

출력 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e94a063f5f1e70e134e2699"), "id" : 1, "Name" : "Robert" }
{ "_id" : ObjectId("5e94a06bf5f1e70e134e269a"), "id" : 2, "Name" : "David" }
{ "_id" : ObjectId("5e94a072f5f1e70e134e269b"), "id" : 3, "Name" : "Sam" }

id:2 문서의 이름이 "Mike"에서 "David"로 성공적으로 변경된 것을 확인할 수 있습니다.

참고 사항

MongoDB 4.2 이상 버전에서는 기존의 update() 메서드가 deprecated(사용 중단 예정) 상태이므로, 단일 문서 업데이트에는 updateOne(), 여러 문서 업데이트에는 updateMany()를 사용하는 것이 좋습니다. 사용자 정의 변수를 활용하는 방식은 두 메서드 모두 동일하게 적용됩니다.