我正试图从我的网站的柜台休息api获取详细统计数据。该数据库具有以下结构。拜托,我是节点的新手。
bear.IP = req.body.IP;
bear.CountryName = req.body.CountryName;
bear.CountryCode = req.body.CountryCode;
bear.ISP = req.body.ISP;
bear.City = req.body.City;
bear.Os = req.body.Os;
bear.Date = req.body.Date;
将每个页面加载的POST请求发送到REST。
我可以通过 -
router.use('/counter/total', function (req, res) {
Bear.distinct('_id').count().exec(function (err, viewcount) {
res.json(viewcount);
});
});
我想得到的是({Distinct(CountryName):viewcount}) - 或({Distinct(OS):viewcount})这样的类似聚合。但我无法做到。
必需输出是这样的 -
[{
"United Kingdom": "121345"
}, {
"Australia": "18645"
}, {
"Myanmar": "297"
}, {
"United States": "17212"
}, ...
我该如何解决这个问题。请帮助我。感谢。
小样本数据库 -
[{"_id":"597c802a33dc398272000001","Os":"Windows","FingerPrint":"3185454076","City":"Yangon","ISP":"Telenor Myanmar","CountryCode":"MM","CountryName":"Myanmar [Burma]","IP":"37.111.1.237","__v":0},{"_id":"597c802a33dc398272000002","Os":"Windows","FingerPrint":"1711566246","City":"Kajang","ISP":"TM Net","CountryCode":"MY","CountryName":"Malaysia","IP":"60.48.94.211","__v":0},{"_id":"597c802e33dc398272000003","Os":"Android","FingerPrint":"3338867125","City":"Yangon","ISP":"Tech Solutions","CountryCode":"MM","CountryName":"Myanmar [Burma]","IP":"74.50.208.220","__v":0},{"_id":"597c802e33dc398272000004","Os":"Android","FingerPrint":"4170065776","City":"Kuala Lumpur","ISP":"U Mobile Sdn Bhd","CountryCode":"MY","CountryName":"Malaysia","IP":"123.136.106.229","__v":0},{"_id":"597c803033dc398272000005","Os":"Android","FingerPrint":"1276175308","City":"Kuala Lumpur","ISP":"TM Net","CountryCode":"MY","CountryName":"Malaysia","IP":"175.140.188.42","__v":0},{"_id":"597c803033dc398272000006","Os":"Android","FingerPrint":"585184694","City":"Bangkok","ISP":"True Internet","CountryCode":"TH","CountryName":"Thailand","IP":"171.99.162.51","__v":0},{"_id":"597c803033dc398272000007","Os":"Android","FingerPrint":"4149392815","City":"Shah Alam (Seksyen 11)","ISP":"DiGi Telecommunications Sdn. Bhd.","CountryCode":"MY","CountryName":"Malaysia","IP":"115.164.88.199","__v":0},{"_id":"597c803333dc398272000008","Os":"Android","FingerPrint":"2143955121","City":"Kuala Lumpur","ISP":"Maxis Communications","CountryCode":"MY","CountryName":"Malaysia","IP":"113.210.66.130","__v":0},{"_id":"597c803333dc398272000009","Os":"Android","FingerPrint":"2914318643","City":"Yangon","ISP":"Telenor Myanmar","CountryCode":"MM","CountryName":"Myanmar [Burma]","IP":"37.111.15.178","__v":0},{"_id":"597c803533dc39827200000a","Os":"Android","FingerPrint":"1819736779","City":"Puchong Batu Dua Belas","ISP":"TM Net","CountryCode":"MY","CountryName":"Malaysia","IP":"124.13.138.153","__v":0},{"_id":"597c803533dc39827200000b","Os":"Android","FingerPrint":"1178799827","City":"Yangon","ISP":"Myanma Posts and Telecommunications","CountryCode":"MM","CountryName":"Myanmar [Burma]","IP":"103.52.14.108","__v":0},{"_id":"597c803733dc39827200000c","Os":"Android","FingerPrint":"3933020417","City":"Kuala Lumpur","ISP":"U Mobile Sdn Bhd","CountryCode":"MY","CountryName":"Malaysia","IP":"123.136.112.220","__v":0},{"_id":"597c803833dc39827200000d","Os":"Android","FingerPrint":"4079283873","City":"Loikaw","ISP":"Myanma Posts and Telecommunications","CountryCode":"MM","CountryName":"Myanmar [Burma]","IP":"103.52.12.167","__v":0},{"_id":"597c803933dc39827200000e","Os":"Android","FingerPrint":"3722986014","City":"Bangkok","ISP":"3BB Broadband","CountryCode":"TH","CountryName":"Thailand","IP":"27.130.160.142","__v":0},{"_id":"597c803a33dc39827200000f","Os":"Android","FingerPrint":"2595883208","City":"Yangon","ISP":"Fortune International","CountryCode":"MM","CountryName":"Myanmar [Burma]","IP":"103.215.194.7","__v":0},{"_id":"597c803b33dc398272000010","Os":"Android","FingerPrint":"3844048617","City":"Parit Raja","ISP":"Ytl Communications Sdn Bhd","CountryCode":"MY","CountryName":"Malaysia","IP":"183.78.126.125","__v":0},{"_id":"597c803b33dc398272000011","Os":"Windows","FingerPrint":"2163751345","City":"Singapore","ISP":"MobileOne","CountryCode":"SG","CountryName":"Singapore","IP":"138.75.196.239","__v":0},{"_id":"597c803e33dc398272000012","Os":"Android","FingerPrint":"475903491","City":"Songkhla","ISP":"3BB Broadband","CountryCode":"TH","CountryName":"Thailand","IP":"171.7.236.10","__v":0},{"_id":"597c803f33dc398272000013","Os":"Android","FingerPrint":"999220323","City":"Yangon","ISP":"Myanma Posts and Telecommunications","CountryCode":"MM","CountryName":"Myanmar [Burma]","IP":"45.112.176.80","__v":0}]
答案 0 :(得分:1)
在aggregation example之后,可以尝试
router.get('/counter/total', function (req, res) {
Bear.aggregate([
{
$group: {
_id: "$CountryName"
viewcount: { $sum: 1 }
}
}
], function (err, bears) {
console.log(err, bears);
// remap the results
var viewcounts = bears.map(function (bear) {
// using ES6 to compute property name
return { [bear._id]: bear.viewcount };
});
console.log(viewcounts);
});
});