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

MongoDB에서 최대 ID를 가진 문서 조회하는 방법

MongoDB에서 가장 큰(max) _id 값을 가진 요소를 가져오려면 find() 메서드와 함께 sort(), limit()을 조합하면 됩니다. 핵심 아이디어는 간단합니다. _id 기준으로 내림차순 정렬한 뒤, 첫 번째 문서 하나만 가져오는 것입니다.

1. 테스트용 컬렉션 생성하기

개념을 이해하기 위해 먼저 문서를 포함한 컬렉션을 생성해 보겠습니다. 아래 쿼리를 사용합니다.

> db.getElementWithMaxIdDemo.insertOne({"Name":"John","Age":21});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8bbce480f10143d8431e1c")
}
> db.getElementWithMaxIdDemo.insertOne({"Name":"Larry","Age":24});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8bbcec80f10143d8431e1d")
}
> db.getElementWithMaxIdDemo.insertOne({"Name":"David","Age":23});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8bbcf580f10143d8431e1e")
}
> db.getElementWithMaxIdDemo.insertOne({"Name":"Chris","Age":20});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8bbcfe80f10143d8431e1f")
}
> db.getElementWithMaxIdDemo.insertOne({"Name":"Robert","Age":25});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8bbd0880f10143d8431e20")
}

2. 전체 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.

> db.getElementWithMaxIdDemo.find().pretty();

실행 결과는 다음과 같습니다.

{
    "_id" : ObjectId("5c8bbce480f10143d8431e1c"),
    "Name" : "John",
    "Age" : 21
}
{
    "_id" : ObjectId("5c8bbcec80f10143d8431e1d"),
    "Name" : "Larry",
    "Age" : 24
}
{
    "_id" : ObjectId("5c8bbcf580f10143d8431e1e"),
    "Name" : "David",
    "Age" : 23
}
{
    "_id" : ObjectId("5c8bbcfe80f10143d8431e1f"),
    "Name" : "Chris",
    "Age" : 20
}
{
    "_id" : ObjectId("5c8bbd0880f10143d8431e20"),
    "Name" : "Robert",
    "Age" : 25
}

총 5개의 문서가 저장되어 있으며, ObjectId 값이 시간 순서대로 증가하는 것을 확인할 수 있습니다.

3. 최대 ID를 가진 요소 조회하기

이제 가장 큰 _id를 가진 문서를 조회하는 쿼리입니다.

> db.getElementWithMaxIdDemo.find().sort({_id:-1}).limit(1).pretty()

실행 결과, 최대 id를 가진 단일 문서가 출력됩니다.

{
    "_id" : ObjectId("5c8bbd0880f10143d8431e20"),
    "Name" : "Robert",
    "Age" : 25
}

쿼리 동작 원리

이 쿼리가 동작하는 방식은 다음과 같습니다.

- find(): 컬렉션의 모든 문서를 대상으로 검색을 수행합니다.
- sort({_id:-1}): _id 값을 기준으로 내림차순(-1) 정렬하여 가장 큰 ObjectId가 맨 앞에 오도록 합니다.
- limit(1): 정렬된 결과 중 첫 번째 문서 한 개만 반환합니다.
- pretty(): 결과를 읽기 쉬운 형태로 포맷팅합니다.

참고로 MongoDB의 ObjectId는 생성 시각 정보를 포함하고 있어 시간순으로 증가하는 특성이 있습니다. 따라서 이 방법은 가장 최근에 삽입된 문서를 조회할 때도 유용하게 활용할 수 있습니다.