MongoDB에서 capped: true 옵션으로 생성한 Capped 컬렉션의 특정 필드를 수정하려면 update() 메서드를 사용하면 됩니다. 이번 글에서는 예제를 통해 Capped 컬렉션을 만들고, 단일 필드를 업데이트하는 전체 과정을 단계별로 살펴보겠습니다.
1. Capped 컬렉션 생성 및 데이터 삽입
먼저 capped: true, size, max 옵션을 지정하여 Capped 컬렉션을 생성하고 문서를 삽입합니다.
> db.createCollection("Demo112", { capped : true, size : 14, max : 3 } );
{ "ok" : 1 }
> db.demo112.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2ef47a9fd5fd66da21447e")
}
> db.demo112.insertOne({"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2ef47e9fd5fd66da21447f")
}
> db.demo112.insertOne({"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2ef4919fd5fd66da214480")
}
2. 현재 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo112.find();
위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e2ef47a9fd5fd66da21447e"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2ef47e9fd5fd66da21447f"), "Name" : "David" }
{ "_id" : ObjectId("5e2ef4919fd5fd66da214480"), "Name" : "David" }
3. 단일 필드 업데이트 쿼리 실행
다음은 Capped 컬렉션에서 단일 필드를 업데이트하는 쿼리입니다. $set 연산자로 변경할 필드를 지정하고, multi: true 옵션을 추가하면 조건에 일치하는 모든 문서가 한 번에 수정됩니다.
> db.demo112.update(
... {Name:"David"},
... {$set:{Name: "Robert"}},
... {multi:true}
... )
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
실행 결과를 보면 조건에 일치한 2개의 문서(nMatched: 2)가 모두 성공적으로 수정(nModified: 2)되었음을 알 수 있습니다.
4. 업데이트 결과 확인
다시 find() 메서드로 컬렉션의 모든 문서를 조회해 보겠습니다.
> db.demo112.find();
Name 필드가 "David"였던 두 문서가 모두 "Robert"로 변경된 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5e2ef47a9fd5fd66da21447e"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2ef47e9fd5fd66da21447f"), "Name" : "Robert" }
{ "_id" : ObjectId("5e2ef4919fd5fd66da214480"), "Name" : "Robert" }
핵심 정리
- Capped 컬렉션도 일반 컬렉션과 동일하게
update()메서드로 필드를 수정할 수 있습니다. $set연산자를 사용하면 지정한 필드만 선택적으로 변경됩니다.multi: true옵션을 설정하면 조건에 맞는 여러 문서를 한 번에 업데이트할 수 있습니다.- Capped 컬렉션은 고정된 크기를 가지며, 용량이 가득 차면 가장 오래된 문서부터 자동으로 삭제됩니다.