다단계 $group을 구현하려면 MongoDB 집계를 사용하십시오. 문서로 컬렉션을 만들자 −
> db.demo76.insertOne({ Name:"Chris","Age" : 21, "CountryName" : 'US' }); { "acknowledged" : true, "insertedId" : ObjectId("5e2bd3e571bf0181ecc42281") } > db.demo76.insertOne({ Name:"Chris","Age" : 21, "CountryName" : 'US' }); { "acknowledged" : true, "insertedId" : ObjectId("5e2bd3e571bf0181ecc42282") } > db.demo76.insertOne({ Name:"Chris","Age" : 23, "CountryName" : 'UK' }); { "acknowledged" : true, "insertedId" : ObjectId("5e2bd3e571bf0181ecc42283") } > db.demo76.insertOne({ Name:"Chris","Age" : 23, "CountryName" : 'UK' }); { "acknowledged" : true, "insertedId" : ObjectId("5e2bd3e571bf0181ecc42284") } > db.demo76.insertOne({ Name:"Chris","Age" : 21, "CountryName" : 'AUS' }); { "acknowledged" : true, "insertedId" : ObjectId("5e2bd3e571bf0181ecc42285") } > db.demo76.insertOne({ Name:"Chris","Age" : 21, "CountryName" : 'AUS' }); { "acknowledged" : true, "insertedId" : ObjectId("5e2bd3e571bf0181ecc42286") } > db.demo76.insertOne({ Name:"Chris","Age" : 23, "CountryName" : 'AUS' }); { "acknowledged" : true, "insertedId" : ObjectId("5e2bd3e571bf0181ecc42287") } > db.demo76.insertOne({ Name:"Chris","Age" : 21, "CountryName" : 'UK' }); { "acknowledged" : true, "insertedId" : ObjectId("5e2bd3e571bf0181ecc42288") }
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo76.find();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : ObjectId("5e2bd3e571bf0181ecc42281"), "Name" : "Chris", "Age" : 21, "CountryName" : "US" } { "_id" : ObjectId("5e2bd3e571bf0181ecc42282"), "Name" : "Chris", "Age" : 21, "CountryName" : "US" } { "_id" : ObjectId("5e2bd3e571bf0181ecc42283"), "Name" : "Chris", "Age" : 23, "CountryName" : "UK" } { "_id" : ObjectId("5e2bd3e571bf0181ecc42284"), "Name" : "Chris", "Age" : 23, "CountryName" : "UK" } { "_id" : ObjectId("5e2bd3e571bf0181ecc42285"), "Name" : "Chris", "Age" : 21, "CountryName" : "AUS" } { "_id" : ObjectId("5e2bd3e571bf0181ecc42286"), "Name" : "Chris", "Age" : 21, "CountryName" : "AUS" } { "_id" : ObjectId("5e2bd3e571bf0181ecc42287"), "Name" : "Chris", "Age" : 23, "CountryName" : "AUS" } { "_id" : ObjectId("5e2bd3e571bf0181ecc42288"), "Name" : "Chris", "Age" : 21, "CountryName" : "UK" }
다음은 다단계 $group −
을 구현하는 쿼리입니다.> db.demo76.aggregate([ ... { "$match": { "Name": "Chris" }}, ... { "$group": { ... "_id": { "Age": "$Age", "CountryName": "$CountryName" }, ... "count": { "$sum": 1 } ... }}, ... { "$group": { ... "_id": "$_id.Age", ... "CountryName": { ... "$push": { ... "k": "$_id.CountryName", ... "v": "$count" ... } ... } ... }}, ... { "$addFields": { ... "CountryName": { ... "$arrayToObject": "$CountryName" ... } ... }} ... ]);
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : 23, "CountryName" : { "AUS" : 1, "UK" : 2 } } { "_id" : 21, "CountryName" : { "UK" : 1, "AUS" : 2, "US" : 2 } }