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

MongoDB에서 목록을 정렬하고 각 항목에 위치(Position)를 추가하는 방법

MongoDB에서 목록을 정렬하려면 sort() 메서드를 사용합니다. 이 글에서는 컬렉션의 문서를 특정 필드 기준으로 정렬한 뒤, 각 문서에 순위를 나타내는 위치(Position) 값을 추가하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 데모용 컬렉션을 만들고 문서를 삽입합니다.

> db.demo581.insertOne({"Name":"Chris","Score":56});{
   "acknowledged" : true, "insertedId" : ObjectId("5e91cbbbfd2d90c177b5bcb6")
}
> db.demo581.insertOne({"Name":"Bob","Score":240});{
   "acknowledged" : true, "insertedId" : ObjectId("5e91cbbbfd2d90c177b5bcb7")
}
> db.demo581.insertOne({"Name":"David","Score":150});{
   "acknowledged" : true, "insertedId" : ObjectId("5e91cbbcfd2d90c177b5bcb8")
}

2. 전체 문서 조회하기

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

> db.demo581.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e91cbbbfd2d90c177b5bcb6"), "Name" : "Chris", "Score" : 56 }
{ "_id" : ObjectId("5e91cbbbfd2d90c177b5bcb7"), "Name" : "Bob", "Score" : 240 }
{ "_id" : ObjectId("5e91cbbcfd2d90c177b5bcb8"), "Name" : "David", "Score" : 150 }

3. 정렬 후 각 항목에 위치 값 추가하기

다음은 Score 필드를 기준으로 목록을 오름차순 정렬하고, 각 항목에 위치(Position) 값을 추가하는 쿼리입니다. 먼저 createIndex()로 인덱스를 생성한 뒤, forEach()와 save()를 조합하여 순번을 부여합니다.

> db.demo581.createIndex({Score:1})
{
   "createdCollectionAutomatically" : false,
   "numIndexesBefore" : 1,
   "numIndexesAfter" : 2,
   "ok" : 1
}
> var i = 1;
> db.demo581.find().sort({"Score": 1}).forEach(function (d){
...    d.Position = i;
...    i++;
...    db.demo581.save(d);
... })

동작 원리를 간단히 설명하면 다음과 같습니다.

  • createIndex({Score:1}): Score 필드에 오름차순 인덱스를 생성해 정렬 성능을 높입니다.
  • var i = 1: 순번 카운터를 초기화합니다.
  • forEach(function(d)): Score 기준으로 정렬된 각 문서를 순회하며 Position 필드에 현재 순번을 저장합니다.

4. 최종 결과 확인하기

변경된 내용을 다시 find() 메서드로 조회해 보겠습니다.

> db.demo581.find();

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

{ "_id" : ObjectId("5e91cbbbfd2d90c177b5bcb6"), "Name" : "Chris", "Score" : 56, "Position" : 1 }
{ "_id" : ObjectId("5e91cbbbfd2d90c177b5bcb7"), "Name" : "Bob", "Score" : 240, "Position" : 3 }
{ "_id" : ObjectId("5e91cbbcfd2d90c177b5bcb8"), "Name" : "David", "Score" : 150, "Position" : 2 }

결과를 보면 Score가 가장 낮은 Chris가 Position 1, David가 Position 2, Bob이 Position 3으로 할당된 것을 확인할 수 있습니다. 이처럼 sort(), forEach(), save()를 조합하면 MongoDB에서도 손쉽게 순위 데이터를 관리할 수 있습니다.