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

MongoDB 집계 연산으로 특정 학생의 점수 합산하기

점수를 합산하려면 aggregate() 메서드와 함께 $sum 연산자를 사용하면 됩니다. 먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

> db.demo434.insertOne({"Name":"Chris","Score":45});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e771603bbc41e36cc3cae93")
}
> db.demo434.insertOne({"Name":"David","Score":55});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e77161abbc41e36cc3cae94")
}
> db.demo434.insertOne({"Name":"Chris","Score":55});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e771624bbc41e36cc3cae95")
}

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.

> db.demo434.find();

위 명령은 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e771603bbc41e36cc3cae93"), "Name" : "Chris", "Score" : 45 }
{ "_id" : ObjectId("5e77161abbc41e36cc3cae94"), "Name" : "David", "Score" : 55 }
{ "_id" : ObjectId("5e771624bbc41e36cc3cae95"), "Name" : "Chris", "Score" : 55 }

특정 학생의 점수 합산 쿼리

다음은 이름이 "Chris"인 학생의 점수를 합산하는 집계 쿼리입니다.

> db.demo434.aggregate([
...    { "$match": { "Name": "Chris"} },
...    { "$group": { "_id": null, "TotalScore": { "$sum": "$Score" } } }
... ]);

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

{ "_id" : null, "TotalScore" : 100 }

쿼리 동작 방식

이 집계 파이프라인은 두 단계로 구성되어 있습니다.

1. $match 단계: 조건에 일치하는 문서만 필터링합니다. 여기서는 Name 필드가 "Chris"인 문서만 다음 단계로 전달되며, 나머지 문서(예: David)는 제외됩니다.

2. $group 단계: _idnull로 지정하면 필터링된 모든 문서가 하나의 그룹으로 묶입니다. 이때 $sum 연산자가 각 문서의 Score 값을 누적하여 합계를 계산하고, 그 결과를 TotalScore라는 새로운 필드에 저장합니다.

결과적으로 Chris의 점수 45점과 55점이 합산되어 총점 100점이 출력되는 것을 확인할 수 있습니다. 이처럼 $match$group, $sum을 조합하면 특정 조건에 해당하는 데이터의 합계를 손쉽게 구할 수 있습니다.