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()를 사용하는 것이 좋습니다. 사용자 정의 변수를 활용하는 방식은 두 메서드 모두 동일하게 적용됩니다.