MongoDB의 $natural 연산자는 컬렉션에 저장된 문서들을 자연스러운 순서(natural order), 즉 디스크에 기록된 순서대로 반환합니다. 만약 이 순서를 반대로 뒤집고 싶다면 $natural: -1 옵션을 사용하면 됩니다.
테스트용 컬렉션 생성하기
먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo710.insertOne({id:101,Name:"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea83a855d33e20ed1097b7a")
}
> db.demo710.insertOne({id:102,Name:"Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea83a8d5d33e20ed1097b7b")
}
> db.demo710.insertOne({id:103,Name:"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea83a935d33e20ed1097b7c")
}
> db.demo710.insertOne({id:104,Name:"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea83a9b5d33e20ed1097b7d")
}find() 메서드로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo710.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다. 문서가 삽입된 순서(101 → 104)대로 표시되는 것을 볼 수 있습니다.
{ "_id" : ObjectId("5ea83a855d33e20ed1097b7a"), "id" : 101, "Name" : "Robert" }
{ "_id" : ObjectId("5ea83a8d5d33e20ed1097b7b"), "id" : 102, "Name" : "Carol" }
{ "_id" : ObjectId("5ea83a935d33e20ed1097b7c"), "id" : 103, "Name" : "Mike" }
{ "_id" : ObjectId("5ea83a9b5d33e20ed1097b7d"), "id" : 104, "Name" : "Sam" }$natural: -1로 항목 순서 뒤집기
이제 sort() 메서드와 함께 $natural: -1을 사용하여 문서 순서를 역순으로 정렬하는 쿼리를 살펴보겠습니다.
> db.demo710.find().sort({$natural:-1});실행 결과는 다음과 같습니다. 가장 나중에 삽입된 문서부터 역순으로 출력되는 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5ea83a9b5d33e20ed1097b7d"), "id" : 104, "Name" : "Sam" }
{ "_id" : ObjectId("5ea83a935d33e20ed1097b7c"), "id" : 103, "Name" : "Mike" }
{ "_id" : ObjectId("5ea83a8d5d33e20ed1097b7b"), "id" : 102, "Name" : "Carol" }
{ "_id" : ObjectId("5ea83a855d33e20ed1097b7a"), "id" : 101, "Name" : "Robert" }정리
$natural 연산자는 인덱스를 사용하지 않고도 문서의 물리적 저장 순서를 기준으로 조회할 수 있는 유용한 기능입니다. 특히 $natural: -1을 활용하면 최근에 삽입된 데이터를 먼저 확인해야 하는 상황에서 간편하게 역순 조회가 가능합니다. 다만 대량의 데이터를 다룰 때는 성능상의 이유로 필요한 필드에 인덱스를 생성하고 일반적인 sort()를 사용하는 것이 권장됩니다.