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

MongoDB에서 삽입하면서 총 레코드 수를 제한하는 방법 – 캡드 컬렉션 활용법

MongoDB에서 데이터를 삽입하면서 동시에 저장되는 총 레코드 수를 제한하고 싶다면 캡드 컬렉션(Capped Collection)을 활용하는 것이 가장 효과적입니다. 컬렉션을 생성할 때 capped: true 옵션을 지정하고, size(컬렉션의 최대 크기)와 max(저장 가능한 최대 문서 수) 값을 함께 설정하면 됩니다.

캡드 컬렉션이란?

캡드 컬렉션은 고정된 크기를 가진 특수한 컬렉션으로, 용량이나 문서 수 한도에 도달하면 가장 오래된 문서부터 자동으로 삭제되며 새로운 문서가 그 자리를 대체합니다. 로그 데이터나 최근 기록만 유지하면 되는 경우에 매우 유용합니다.

캡드 컬렉션 생성 및 문서 삽입하기

capped: true로 설정하고 크기(size)를 4로 지정한 컬렉션을 생성해 보겠습니다. 이때 max 값도 4로 설정하여 최대 4개의 문서만 저장되도록 합니다.

> db.createCollection("demo297", {capped:true, size:4,max:4});
{ "ok" : 1 }

이제 이 컬렉션에 문서를 하나씩 삽입해 보겠습니다. 총 5개의 문서를 순차적으로 추가합니다.

> db.demo297.insertOne({"Name":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d54385d93261e4bc9ea43")
}
> db.demo297.insertOne({"Name":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d543e5d93261e4bc9ea44")
}
> db.demo297.insertOne({"Name":"Mike"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d543e5d93261e4bc9ea45")
}
> db.demo297.insertOne({"Name":"Sam"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d543f5d93261e4bc9ea46")
}
> db.demo297.insertOne({"Name":"John"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d54405d93261e4bc9ea47")
}

find() 메서드로 결과 확인하기

find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 조회해 보겠습니다.

> db.demo297.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e4d543e5d93261e4bc9ea44"), "Name" : "Bob" }
{ "_id" : ObjectId("5e4d543e5d93261e4bc9ea45"), "Name" : "Mike" }
{ "_id" : ObjectId("5e4d543f5d93261e4bc9ea46"), "Name" : "Sam" }
{ "_id" : ObjectId("5e4d54405d93261e4bc9ea47"), "Name" : "John" }

결과 분석

흥미로운 점은 처음 삽입했던 "Chris"라는 문서가 사라졌다는 것입니다. 컬렉션의 max 값이 4로 설정되어 있었기 때문에, 다섯 번째 문서인 "John"이 삽입되는 순간 가장 오래된 문서인 "Chris"가 자동으로 삭제되고 새 문서가 그 자리를 차지한 것입니다.

이처럼 MongoDB의 캡드 컬렉션을 사용하면 별도의 삭제 작업 없이도 항상 최신 N개의 레코드만 유지할 수 있습니다. 다만 주의할 점은 캡드 컬렉션은 생성 후 크기 변경이 제한적이며, 일반적인 업데이트로 문서 크기가 늘어나는 작업에 제약이 있다는 점입니다.