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

MongoDB로 각 그룹의 최대 항목을 선택하는 방법은 무엇입니까?

<시간/>

$group을 사용할 수 있습니다. 문서로 컬렉션을 만들자 −

> db.demo659.insertOne({Name:"Chris",CountryName:"US","Marks":50});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1a50724113ea5458c7cf9")
}
> db.demo659.insertOne({Name:"David",CountryName:"US","Marks":60});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1a50724113ea5458c7cfa")
}
> db.demo659.insertOne({Name:"Mike",CountryName:"US","Marks":55});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1a50724113ea5458c7cfb")
}
> db.demo659.insertOne({Name:"Chris",CountryName:"UK","Marks":75});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1a50724113ea5458c7cfc")
}
> db.demo659.insertOne({Name:"David",CountryName:"UK","Marks":54});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1a50724113ea5458c7cfd")
}
> db.demo659.insertOne({Name:"Mike",CountryName:"UK","Marks":72});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1a50824113ea5458c7cfe")
}

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

> db.demo659.find();

그러면 다음과 같은 출력이 생성됩니다. 각 즉, CountryName US 및 UK −

에서 최대 점수를 찾습니다.
{ "_id" : ObjectId("5ea1a50724113ea5458c7cf9"), "Name" : "Chris", "CountryName" : "US", "Marks" : 50 }
{ "_id" : ObjectId("5ea1a50724113ea5458c7cfa"), "Name" : "David", "CountryName" : "US", "Marks" : 60 }
{ "_id" : ObjectId("5ea1a50724113ea5458c7cfb"), "Name" : "Mike", "CountryName" : "US", "Marks" : 55 }
{ "_id" : ObjectId("5ea1a50724113ea5458c7cfc"), "Name" : "Chris", "CountryName" : "UK", "Marks" : 75 }
{ "_id" : ObjectId("5ea1a50724113ea5458c7cfd"), "Name" : "David", "CountryName" : "UK", "Marks" : 54 }
{ "_id" : ObjectId("5ea1a50824113ea5458c7cfe"), "Name" : "Mike", "CountryName" : "UK", "Marks" : 72 }

다음은 각 그룹에서 최대 항목을 선택하는 쿼리입니다 -

> db.demo659.aggregate( { $group: {
...    _id: {CountryName: "$CountryName" },
...    'MaxMarks': { $max : "$Marks" }
... }})

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

{ "_id" : { "CountryName" : "UK" }, "MaxMarks" : 75 }
{ "_id" : { "CountryName" : "US" }, "MaxMarks" : 60 }