정렬 순서를 지정하지 않고 고정 사이즈 컬렉션을 쿼리하면 MongoDB가 삽입된 순서대로 결과를 반환합니다. 즉, 가장 오래된 문서가 먼저 반환됩니다.
컬렉션 에서 가장 최근에 삽입된 요소를 효율적으로 조회 하려면 자연 순서 를 사용합니다. 이는 로그 파일 에서 tail
명령을 사용하는 것과 유사합니다.
이 작업에 대하여
일반적으로 TTL(Time To Live) 인덱스는 고정 사이즈 컬렉션보다 더 나은 성능과 유연성을 제공합니다. TTL 인덱스는 날짜로 입력된 필드 값과 인덱스의 TTL 값에 따라 일반 컬렉션에서 데이터를 만료하고 제거합니다.
고정 사이즈 컬렉션은 쓰기 작업을 직렬화하므로 비고정 사이즈 컬렉션보다 동시 삽입, 업데이트 및 삭제 성능이 떨어집니다. 고정 사이즈 컬렉션을 만들기 전에 TTL 인덱스를 대신 사용할 수 있는지 고려하세요.
다중 동시 쓰기
고정 사이즈 컬렉션에 동시 작성자가 있는 경우, MongoDB는 문서가 삽입 순서대로 반환되는 것을 보장하지 않습니다.
시작하기 전에
2
샘플 데이터 삽입
db.log.insertMany( [ { message: "system start", type: "startup", time: 1711403508 }, { message: "user login attempt", type: "info", time: 1711403907 }, { message: "user login fail", type: "warning", time: 1711404209 }, { message: "user login success", type: "info", time: 1711404367 }, { message: "user logout", type: "info", time: 1711404555 } ] )
단계
다음 예시는 그 방법을 보여줍니다.
삽입 순서대로 문서 반환
log
컬렉션에서 type
이 info
인 문서를 쿼리하고 기본 정렬 순서를 사용합니다.
db.log.find( { type: "info" } )
[ { _id: ObjectId("660204b74cabd75abebadbc2"), message: 'user login attempt', type: 'info', time: 1711403907 }, { _id: ObjectId("660204b74cabd75abebadbc4"), message: 'user login success', type: 'info', time: 1711404367 }, { _id: ObjectId("660204b74cabd75abebadbc5"), message: 'user logout', type: 'info', time: 1711404555 } ]
문서는 삽입된 순서대로 반환됩니다.
가장 최근 문서 반환
문서를 역삽입 순으로 반환하려면(즉, 가장 최근 문서가 먼저) $natural
매개 변수가 -1
(으)로 설정된 sort()
메서드를 지정합니다.
다음 쿼리는 log
컬렉션에서 가장 최근의 문서부터 시작하여 최신 문서 3개를 반환합니다.
db.log.find().sort( { $natural: -1 } ).limit(3)
[ { _id: ObjectId("6601f2484cabd75abebadbbb"), message: 'user logout', type: 'info', time: 1711404555 }, { _id: ObjectId("6601f2484cabd75abebadbba"), message: 'user login success', type: 'info', time: 1711404367 }, { _id: ObjectId("6601f2484cabd75abebadbb9"), message: 'user login fail', type: 'warning', time: 1711404209 } ]