MongoDB 컬렉션에서 레코드 수를 제한할 수 있을까요?
네, 가능합니다. MongoDB에서는 capped(고정 크기) 컬렉션을 생성할 때 max 옵션을 함께 지정하면 컬렉션에 저장되는 문서(레코드)의 최대 개수를 제한할 수 있습니다.
기본 문법
db.createCollection("컬렉션명", {capped: true, size: 바이트_단위_크기, max: 저장할_최대_문서_수})여기서 size는 컬렉션의 최대 크기를 바이트 단위로 지정하고, max는 저장할 수 있는 문서의 최대 개수를 지정합니다. 두 조건 중 어느 하나라도 먼저 초과되면 가장 오래된 문서부터 자동으로 삭제되어 새로운 문서가 그 공간을 차지합니다. 즉, FIFO(선입선출) 방식으로 동작합니다.
Capped 컬렉션 생성 예제
먼저 capped: true 옵션과 함께 최대 3개의 문서만 저장되도록 컬렉션을 생성해 보겠습니다.
> db.createCollection("limitTheNumberOfRecordsDemo", {capped:true, size:200024, max:3})
{ "ok" : 1 }문서 삽입하기
이제 생성한 컬렉션에 여러 개의 문서를 순차적으로 삽입해 보겠습니다.
> db.limitTheNumberOfRecordsDemo.insertOne({"ClientName":"James Brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9e601b50a6c6dd317adad")
}
> db.limitTheNumberOfRecordsDemo.insertOne({"ClientName":"Sam Williams"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9e60bb50a6c6dd317adae")
}
> db.limitTheNumberOfRecordsDemo.insertOne({"ClientName":"David Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9e612b50a6c6dd317adaf")
}
> db.limitTheNumberOfRecordsDemo.insertOne({"ClientName":"Carol Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9e61ab50a6c6dd317adb0")
}
> db.limitTheNumberOfRecordsDemo.insertOne({"ClientName":"Adam Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9e649b50a6c6dd317adb1")
}
> db.limitTheNumberOfRecordsDemo.insertOne({"ClientName":"John Doe"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9e64fb50a6c6dd317adb2")
}위 예제에서는 총 6개의 문서를 삽입했지만, 컬렉션의 max 값이 3으로 설정되어 있으므로 처음 삽입된 3개의 문서(James Brown, Sam Williams, David Miller)는 자동으로 삭제됩니다.
결과 확인하기
find() 메서드를 사용해 컬렉션의 모든 문서를 조회해 보겠습니다.
> db.limitTheNumberOfRecordsDemo.find();
실행 결과는 다음과 같습니다. 앞서 설정한 max 제한에 따라 가장 최근에 삽입된 3개의 레코드만 조회되는 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5cd9e61ab50a6c6dd317adb0"), "ClientName" : "Carol Taylor" }
{ "_id" : ObjectId("5cd9e649b50a6c6dd317adb1"), "ClientName" : "Adam Smith" }
{ "_id" : ObjectId("5cd9e64fb50a6c6dd317adb2"), "ClientName" : "John Doe" }정리 및 활용 팁
- capped: true – 고정 크기 컬렉션임을 나타냅니다.
- size – 컬렉션의 최대 크기를 바이트 단위로 지정합니다(필수 항목).
- max – 저장 가능한 최대 문서 수를 지정합니다.
- 크기 또는 개수 제한에 도달하면 오래된 문서부터 자동으로 삭제되므로, 로그 데이터나 최근 이벤트 기록처럼 최신 데이터만 유지하면 되는 경우에 특히 유용합니다.
- 참고로 capped 컬렉션은 일반 컬렉션과 달리 문서를 삭제하거나 크기를 늘리는 업데이트가 제한됩니다.