如何使用聚合函数来计算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 }