MongoDB - пример группы, количества и сортировки
Некоторые примеры MongoDB, чтобы показать вам, как выполнять групповые запросы, считать и сортировать запросы.
1. Тестовые данные
Коллекцияwhois_range
, содержащая много записей.
> db.whois_range.find(); { "_id" : 1, "country" : "us", "source" : "ARIN", "status" : "NEW", "createdDate" : ISODate("2016-05-03T08:52:32.434Z") }, { "_id" : 2, "country" : "us", "source" : "ARIN", "status" : "NEW", "createdDate" : ISODate("2016-05-03T09:52:32.434Z") }, { "_id" : 3, "country" : "cn", "source" : "APNIC", "status" : "NEW", "createdDate" : ISODate("2016-05-03T10:52:32.434Z") }, { "_id" : 4, "country" : "eu", "source" : "RIPE", "status" : "NEW", "createdDate" : ISODate("2016-05-03T10:52:32.434Z") }, {...}
P.S “Source” = RIPE, AFRINIC, KRNIC, LACNIC, APNIC, JPNIC and ARIN
2. Пример группы и количества
Сгруппировать по «источнику» и подсчитать общее количество «источника».
> db.whois_range.aggregate([ {"$group" : {_id:"$source", count:{$sum:1}}} ]) { "_id" : "RIPE", "count" : 29270 } { "_id" : "AFRINIC", "count" : 1326 } { "_id" : "KRNIC", "count" : 105 } { "_id" : "LACNIC", "count" : 5889 } { "_id" : "APNIC", "count" : 6644 } { "_id" : "JPNIC", "count" : 167 } { "_id" : "ARIN", "count" : 25429 }
3. Пример группировки по нескольким идентификаторам
Группируйте по двум идентификаторам: «источник» и «статус».
> db.whois_range.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}} ]) ]) { "_id" : { "source" : "RIPE", "status" : "NEW" }, "count" : 29260 } { "_id" : { "source" : "RIPE", "status" : "ERROR" }, "count" : 10 } { "_id" : { "source" : "LACNIC", "status" : "NEW" }, "count" : 5889 } { "_id" : { "source" : "KRNIC", "status" : "NEW" }, "count" : 105 } { "_id" : { "source" : "APNIC", "status" : "NEW" }, "count" : 6644 } { "_id" : { "source" : "AFRINIC", "status" : "NEW" }, "count" : 1326 } { "_id" : { "source" : "JPNIC", "status" : "NEW" }, "count" : 167 } { "_id" : { "source" : "ARIN", "status" : "NEW" }, "count" : 25420 } { "_id" : { "source" : "ARIN", "status" : "DONE" }, "count" : 9 }
3. Пример группы, количества и сортировки
3.1 Group by two ids: “source” and “status”, count the total number of records, and sort by “source”.
> db.whois_range.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}} }, {$sort:{"_id.source":1}} ]) { "_id" : { "source" : "AFRINIC", "status" : "NEW" }, "count" : 1326 } { "_id" : { "source" : "APNIC", "status" : "NEW" }, "count" : 6644 } { "_id" : { "source" : "ARIN", "status" : "NEW" }, "count" : 25420 } { "_id" : { "source" : "ARIN", "status" : "DONE" }, "count" : 9 } { "_id" : { "source" : "JPNIC", "status" : "NEW" }, "count" : 167 } { "_id" : { "source" : "KRNIC", "status" : "NEW" }, "count" : 105 } { "_id" : { "source" : "LACNIC", "status" : "NEW" }, "count" : 5889 } { "_id" : { "source" : "RIPE", "status" : "NEW" }, "count" : 29260 } { "_id" : { "source" : "RIPE", "status" : "ERROR" }, "count" : 10 }
3.2 Sort by “count”, descending order.
> db.whois_range.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}} }, {$sort:{"count":-1}} ]) { "_id" : { "source" : "RIPE", "status" : "NEW" }, "count" : 29260 } { "_id" : { "source" : "ARIN", "status" : "NEW" }, "count" : 25420 } { "_id" : { "source" : "APNIC", "status" : "NEW" }, "count" : 6644 } { "_id" : { "source" : "LACNIC", "status" : "NEW" }, "count" : 5889 } { "_id" : { "source" : "AFRINIC", "status" : "NEW" }, "count" : 1326 } { "_id" : { "source" : "JPNIC", "status" : "NEW" }, "count" : 167 } { "_id" : { "source" : "KRNIC", "status" : "NEW" }, "count" : 105 } { "_id" : { "source" : "RIPE", "status" : "ERROR" }, "count" : 10 } { "_id" : { "source" : "ARIN", "status" : "DONE" }, "count" : 9 }
Готово.