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

MongoDB에서 NumberLong 타입 필드를 찾아 교체하는 방법

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개의 문서가 모두 성공적으로 수정되었음을 의미합니다.

참고: update() 메서드의 세 번째 인자는 upsert 옵션, 네 번째 인자는 multi 옵션입니다. multi를 false로 설정하면 일치하는 첫 번째 문서만 수정되므로, 여러 문서를 한꺼번에 변경하려면 반드시 true로 지정해야 합니다.

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에서 특정 타입의 필드 값을 손쉽게 대량 수정할 수 있습니다.