如何使用聚合函数来计算mongoDB中的唯一数据
这是input的JSON数据这样存储在mongoDB中
input
[{ 'name' : 'user1', 'date' : '23/09/2017', 'deviceType' : 'Android' }, { 'name' : 'user2', 'date' : '24/09/2017', 'deviceType' :'ios' }, { 'name' : 'user1', 'date' : '23/09/2017', 'deviceType' :'ios' }, { 'name' : 'user2', 'date' : '23/09/2017', 'deviceType' :'ios' }, { 'name' : 'user1', 'date' : '24/09/2017', 'deviceType' :'ios' }, { 'name' : 'user2', 'date' : '25/09/2017', 'deviceType' :'Android' } ]
和输出是
产量
[{ 'date' : '23/09/2017', 'iosCount': 2, 'androidCount':1 }, { 'date' : '24/09/2017', 'iosCount': 2, 'androidCount':0 }, { 'date' : '25/09/2017', 'iosCount': 0, 'androidCount':1 } ]
我已经使用了一个聚合函数来执行任务。 假设集合名称是用户那么。
db.users.aggregate([{'$group':{ '_id':{'date':'$date','name':'$name'}, 'count':{'$sum' :1} } }])
此聚合函数的输出不会返回适当的结果。
让我们解释更多我感兴趣只有date假设23/08/2017有多less用户在那里,他们已经使用的设备types或iOS或Android不计数的设备。 比方说例子
如果date“23/09/2017”有input数据像
[{'name':'user1','date':'23 / 09/2017','deviceType':'Android'},
{'name':'user1','date':'23 / 09/2017','deviceType':'ios'},
{'name':'user1','date':'23 / 09/2017','deviceType':'Android'},
{'name':'user2','date':'23 / 09/2017','deviceType':'ios'}]
产量
[{'date':23/09/2017,totalIos:2,totalAndroid:1}]
$sum
要求你告诉它什么总结。 这是你期望的输出是:
db.users.aggregate([{'$group': {'_id': {'date':'$date','name':'$name'}, 'count': {'$sum': 1}}}]) { "_id" : { "date" : "24/09/2017", "name" : "user1" }, "count" : 1 } { "_id" : { "date" : "23/09/2017", "name" : "user2" }, "count" : 1 } { "_id" : { "date" : "24/09/2017", "name" : "user2" }, "count" : 1 } { "_id" : { "date" : "25/09/2017", "name" : "user2" }, "count" : 1 } { "_id" : { "date" : "23/09/2017", "name" : "user1" }, "count" : 2 }