MongoDB에서 특정 문서(현재 문서)와 그 바로 앞에 있는 이전 문서를 함께 가져오고 싶다면 sort() 메서드와 limit() 메서드를 조합하면 됩니다. 필요한 문서가 2개뿐이므로 limit(2)를 사용해 결과 개수를 제한합니다.
1. 샘플 컬렉션 생성하기
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입하겠습니다.
> db.demo360.insertOne({id:101,"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e56a10c54a481fef8ec7a15")
}
> db.demo360.insertOne({id:102,"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e56a11254a481fef8ec7a16")
}
> db.demo360.insertOne({id:103,"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e56a11a54a481fef8ec7a17")
}
> db.demo360.insertOne({id:104,"Name":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e56a11f54a481fef8ec7a18")
}2. 저장된 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo360.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e56a10c54a481fef8ec7a15"), "id" : 101, "Name" : "Chris" }
{ "_id" : ObjectId("5e56a11254a481fef8ec7a16"), "id" : 102, "Name" : "David" }
{ "_id" : ObjectId("5e56a11a54a481fef8ec7a17"), "id" : 103, "Name" : "Bob" }
{ "_id" : ObjectId("5e56a11f54a481fef8ec7a18"), "id" : 104, "Name" : "Mike" }3. 현재 문서와 이전 문서 조회 쿼리
다음은 MongoDB에서 현재 문서(id: 102)와 그 이전 문서(id: 101)를 함께 찾는 쿼리입니다.
> db.demo360.find({ id: { $lte: 102 } }, {id:1, Name: 1 }).sort({_id: -1}).limit(2);이 쿼리는 다음과 같이 동작합니다.
- { id: { $lte: 102 } }: id 값이 102 이하인 문서만 필터링합니다.
- {id:1, Name: 1}: 프로젝션을 통해 id와 Name 필드만 반환합니다.
- .sort({_id: -1}): _id 기준으로 내림차순 정렬하여 최근 문서부터 가져옵니다.
- .limit(2): 최대 2개의 문서만 반환하도록 제한합니다.
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e56a11254a481fef8ec7a16"), "id" : 102, "Name" : "David" }
{ "_id" : ObjectId("5e56a10c54a481fef8ec7a15"), "id" : 101, "Name" : "Chris" }결과를 보면 id가 102인 현재 문서(David)와 id가 101인 이전 문서(Chris)가 순서대로 조회된 것을 확인할 수 있습니다. 이처럼 조건 필터링, 정렬, 개수 제한을 조합하면 원하는 위치의 문서들을 손쉽게 가져올 수 있습니다.