Computer >> 컴퓨터 >  >> 프로그램 작성 >> MongoDB

모든 시험의 전체 평균보다 한 점수 낮은 시험을 가진 학생의 이름을 가져오는 집계 프레임워크

<시간/>

이를 위해 집계()를 사용할 수 있습니다. 테스트 기록을 "Value1", "Value2" 등으로 간주했습니다. 문서로 컬렉션을 생성해 보겠습니다. −

> db.demo432.insertOne(
...    {
...       "_id" : 101,
...       "Name" : "David",
...       "Value1" : 67,
...       "Value2" : 87,
...       "Value3" : 78
...    }
... )
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo432.insertOne(
...    {
...       "_id" : 102,
...       "Name" : "Sam",
...       "Value1" : 98,
...       "Value2" : 45,
...       "Value3" : 90
...    }
... )
{ "acknowledged" : true, "insertedId" : 102 }

find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -

> db.demo432.find();

이것은 다음과 같은 출력을 생성합니다 -

{ "_id" : 101, "Name" : "David", "Value1" : 67, "Value2" : 87, "Value3" : 78 }
{ "_id" : 102, "Name" : "Sam", "Value1" : 98, "Value2" : 45, "Value3" : 90 }

다음은 한 시험에서 모든 시험의 평균보다 낮은 점수를 받은 학생의 이름을 구하는 쿼리입니다 -

> db.demo432.aggregate([{
...    $project: {
...       Name: '$Name',
...       Value1: '$Value1',
...       average: {
...          $avg: ['$Value1', '$Value2', '$Value3']
...          }
...       }
...    },
...    {
...    $group: {
...       _id: null,
...       NameValue1: {
...          $push: {
...             "Name": "$Name",
...             "Value1": "$Value1"
...          }
...       },
...       totalAverage: {
...          $avg: '$average'
...          }
...       }
...    },
...    { $project:
...    { lessthanAverageNames:
...    {
...       $map:
...       {
...          input: {
...             $filter: {
...                input: "$NameValue1",
...                as: "out",
...                cond: {
...                   $lt: ["$$out.Value1", "$totalAverage"]
...                   }
...                }
...             },
...             as: "o",
...             in: "$$o.Name"
...             }
...          }
...       }
...    }
... ]);

이것은 다음과 같은 출력을 생성합니다 -

{ "_id" : null, "lessthanAverageNames" : [ "David" ] }