MongoDB에서 NumberLong 타입으로 저장된 필드의 값을 찾아 다른 값으로 교체하려면 update() 메서드와 함께 $set 연산자를 사용하면 됩니다. 특히 update() 호출 시 네 번째 인자인 multi 옵션을 true로 설정하면 조건에 일치하는 모든 문서를 한 번에 수정할 수 있습니다.
1. 테스트용 컬렉션 생성하기
먼저 예제 실습을 위해 문서들을 담은 컬렉션을 생성해 보겠습니다. 아래 예시에서는 UserId 필드를 NumberLong 타입으로 지정하여 데이터를 삽입합니다.
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(101)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c960b64f4b851c3a13b6")
}
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(110)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c966b64f4b851c3a13b7")
}
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(101)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c969b64f4b851c3a13b8")
}
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(120)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c96cb64f4b851c3a13b9")
}
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(130)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c96eb64f4b851c3a13ba")
}2. 저장된 문서 확인하기
find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.findAndReplaceDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5cd2c960b64f4b851c3a13b6"), "UserId" : NumberLong(101) }
{ "_id" : ObjectId("5cd2c966b64f4b851c3a13b7"), "UserId" : NumberLong(110) }
{ "_id" : ObjectId("5cd2c969b64f4b851c3a13b8"), "UserId" : NumberLong(101) }
{ "_id" : ObjectId("5cd2c96cb64f4b851c3a13b9"), "UserId" : NumberLong(120) }
{ "_id" : ObjectId("5cd2c96eb64f4b851c3a13ba"), "UserId" : NumberLong(130) }현재 NumberLong(101) 값을 가진 문서가 두 개 존재하는 것을 확인할 수 있습니다.
3. $set 연산자로 NumberLong 값 교체하기
이제 MongoDB에서 NumberLong 타입 필드를 찾아 새로운 값으로 교체하는 쿼리를 살펴보겠습니다. 아래 명령어는 UserId가 NumberLong(101)인 모든 문서를 찾아 해당 값을 NumberLong(10001)으로 변경합니다.
> db.findAndReplaceDemo.update({"UserId":NumberLong(101)}, {$set:{"UserId":NumberLong(10001)}},false,true);
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })실행 결과를 보면 nMatched와 nModified가 각각 2로 표시되는데, 이는 조건에 일치한 2개의 문서가 모두 성공적으로 수정되었음을 의미합니다.
4. 수정 결과 검증하기
다시 find() 메서드를 실행하여 업데이트가 정상적으로 적용되었는지 확인해 보겠습니다.
> db.findAndReplaceDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cd2c960b64f4b851c3a13b6"),
"UserId" : NumberLong(10001)
}
{
"_id" : ObjectId("5cd2c966b64f4b851c3a13b7"),
"UserId" : NumberLong(110)
}
{
"_id" : ObjectId("5cd2c969b64f4b851c3a13b8"),
"UserId" : NumberLong(10001)
}
{
"_id" : ObjectId("5cd2c96cb64f4b851c3a13b9"),
"UserId" : NumberLong(120)
}
{
"_id" : ObjectId("5cd2c96eb64f4b851c3a13ba"),
"UserId" : NumberLong(130)
}출력 결과에서 볼 수 있듯이, 기존에 NumberLong(101)이었던 두 개의 문서가 모두 NumberLong(10001)으로 성공적으로 교체된 것을 확인할 수 있습니다. 이처럼 $set 연산자와 multi 옵션을 활용하면 MongoDB에서 특정 타입의 필드 값을 손쉽게 대량 수정할 수 있습니다.