그룹화하려면 MongoDB에서 $week 및 $month를 사용합니다. 문서로 컬렉션을 만들자 −
> db.demo133.insertOne({"Rank":18,"DueDate":new ISODate("2020-01-10")}); { "acknowledged" : true, "insertedId" : ObjectId("5e31980968e7f832db1a7f78") } > db.demo133.insertOne({"Rank":12,"DueDate":new ISODate("2020-01-10")}); { "acknowledged" : true, "insertedId" : ObjectId("5e31982568e7f832db1a7f79") } > db.demo133.insertOne({"Rank":12,"DueDate":new ISODate("2020-02-01")}); { "acknowledged" : true, "insertedId" : ObjectId("5e31986568e7f832db1a7f7a") } > db.demo133.insertOne({"Rank":20,"DueDate":new ISODate("2020-02-01")}); { "acknowledged" : true, "insertedId" : ObjectId("5e31986c68e7f832db1a7f7b") }
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo133.find();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : ObjectId("5e31980968e7f832db1a7f78"), "Rank" : 18, "DueDate" : ISODate("2020-01-10T00:00:00Z") } { "_id" : ObjectId("5e31982568e7f832db1a7f79"), "Rank" : 12, "DueDate" : ISODate("2020-01-10T00:00:00Z") } { "_id" : ObjectId("5e31986568e7f832db1a7f7a"), "Rank" : 12, "DueDate" : ISODate("2020-02-01T00:00:00Z") } { "_id" : ObjectId("5e31986c68e7f832db1a7f7b"), "Rank" : 20, "DueDate" : ISODate("2020-02-01T00:00:00Z") }
다음은 날짜 범위를 기준으로 일/월/주별로 그룹화하는 쿼리입니다 -
> db.demo133.aggregate([ ... { ... "$project": { ... "DueDateWeek": { "$week": "$DueDate" }, ... "DueDateMonth": { "$month": "$DueDate" }, ... "Rank": 1 ... } ... }, ... { ... "$group": { ... "_id": "$DueDateWeek", ... "AvgValue": { "$avg": "$Rank" }, ... "MonthValue": { "$first": "$DueDateMonth" } ... } ... } ... ])
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : 4, "AvgValue" : 16, "MonthValue" : 2 } { "_id" : 1, "AvgValue" : 15, "MonthValue" : 1 }