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

MongoDB에서 컬렉션 내 문서 순서를 지정하는 방법 ($natural 연산자 활용)

MongoDB의 기본 정렬 방식과 $natural 연산자

MongoDB는 $natural 연산자를 사용하여 하나의 컬렉션 내 문서들을 정렬합니다. find() 메서드로 문서를 조회하면, MongoDB는 삽입된 순서 그대로 문서를 저장하고 반환합니다. 이때 기본 정렬 순서가 바로 $natural입니다.

$natural 연산자의 기본 문법은 다음과 같습니다.

db.yourCollectionName.find().sort({ "$natural": 1 });

위 문법에서 값이 1이면 삽입 순서(오름차순)대로, -1이면 역순(내림차순)으로 조회됩니다.

예제 컬렉션 생성하기

문법을 실제로 이해하기 위해, 먼저 문서가 포함된 컬렉션을 생성해 보겠습니다. 아래 쿼리로 orderDocsDemo 컬렉션에 여러 개의 문서를 삽입합니다.

> db.orderDocsDemo.insertOne({"UserScore":87});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9531a316f542d757e2b44b")
}
> db.orderDocsDemo.insertOne({"UserScore":98});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9531a816f542d757e2b44c")
}
> db.orderDocsDemo.insertOne({"UserScore":99});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9531b216f542d757e2b44d")
}
> db.orderDocsDemo.insertOne({"UserScore":67});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9531b716f542d757e2b44e")
}
> db.orderDocsDemo.insertOne({"UserScore":78});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9531bd16f542d757e2b44f")
}
> db.orderDocsDemo.insertOne({"UserScore":91});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9531c416f542d757e2b450")
}
> db.orderDocsDemo.insertOne({"UserScore":86});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9531c816f542d757e2b451")
}

find() 메서드로 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

> db.orderDocsDemo.find();

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

{ "_id" : ObjectId("5c9531a316f542d757e2b44b"), "UserScore" : 87 }
{ "_id" : ObjectId("5c9531a816f542d757e2b44c"), "UserScore" : 98 }
{ "_id" : ObjectId("5c9531b216f542d757e2b44d"), "UserScore" : 99 }
{ "_id" : ObjectId("5c9531b716f542d757e2b44e"), "UserScore" : 67 }
{ "_id" : ObjectId("5c9531bd16f542d757e2b44f"), "UserScore" : 78 }
{ "_id" : ObjectId("5c9531c416f542d757e2b450"), "UserScore" : 91 }
{ "_id" : ObjectId("5c9531c816f542d757e2b451"), "UserScore" : 86 }

$natural 연산자로 문서 순서 지정하기

컬렉션 내 문서를 $natural 순서로 정렬하여 조회하는 쿼리는 다음과 같습니다.

> db.orderDocsDemo.find().sort({ "$natural": 1 });

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

{ "_id" : ObjectId("5c9531a316f542d757e2b44b"), "UserScore" : 87 }
{ "_id" : ObjectId("5c9531a816f542d757e2b44c"), "UserScore" : 98 }
{ "_id" : ObjectId("5c9531b216f542d757e2b44d"), "UserScore" : 99 }
{ "_id" : ObjectId("5c9531b716f542d757e2b44e"), "UserScore" : 67 }
{ "_id" : ObjectId("5c9531bd16f542d757e2b44f"), "UserScore" : 78 }
{ "_id" : ObjectId("5c9531c416f542d757e2b450"), "UserScore" : 91 }
{ "_id" : ObjectId("5c9531c816f542d757e2b451"), "UserScore" : 86 }

위 출력 결과를 보면, 문서들이 처음 삽입했던 순서 그대로 반환되는 것을 확인할 수 있습니다. 즉, $natural: 1은 디스크에 저장된 물리적 순서를 기준으로 문서를 조회합니다.

특정 필드 기준으로 정렬하기

만약 삽입 순서가 아닌 특정 필드 값을 기준으로 정렬된 문서를 얻고 싶다면, 다음과 같이 sort()에 해당 필드를 지정하면 됩니다. 여기서는 UserScore 필드를 오름차순으로 정렬해 보겠습니다.

> db.orderDocsDemo.find().sort({ "UserScore": 1 });

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

{ "_id" : ObjectId("5c9531b716f542d757e2b44e"), "UserScore" : 67 }
{ "_id" : ObjectId("5c9531bd16f542d757e2b44f"), "UserScore" : 78 }
{ "_id" : ObjectId("5c9531c816f542d757e2b451"), "UserScore" : 86 }
{ "_id" : ObjectId("5c9531a316f542d757e2b44b"), "UserScore" : 87 }
{ "_id" : ObjectId("5c9531c416f542d757e2b450"), "UserScore" : 91 }
{ "_id" : ObjectId("5c9531a816f542d757e2b44c"), "UserScore" : 98 }
{ "_id" : ObjectId("5c9531b216f542d757e2b44d"), "UserScore" : 99 }

이번에는 UserScore 값이 67부터 99까지 오름차순으로 정렬되어 출력되었습니다. 내림차순으로 정렬하려면 sort({ "UserScore": -1 })처럼 값을 -1로 지정하면 됩니다.

정리

  • MongoDB는 기본적으로 $natural 순서, 즉 문서가 저장된 물리적 순서대로 결과를 반환합니다.
  • sort({ "$natural": 1 })은 삽입 순서대로, sort({ "$natural": -1 })은 역순으로 조회합니다.
  • 특정 필드 기준의 논리적 정렬이 필요하다면 sort() 메서드에 해당 필드와 정렬 방향(1 또는 -1)을 지정하면 됩니다.