如何计算mongoDB中唯一数据的数量

我在mongoDB中是非常新的初学者。

我们必须显示输出数据

  1. 用户按date的唯一编号。

  2. Android用户和Ios用户的数量。

这是inputJSON数据

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 } ] 

这是一个解决scheme,对于设备types是中性的。 如果添加更多,aggpipe道将适应新的值。

 db.foo.aggregate([ {$group: {_id: {d:"$date",t:"$deviceType"}, n: {$sum:1}}} ,{$group: {_id: "$_id.d", devices: {$push: {type:"$_id.t", n:"$n"}} }} ]); { "_id" : "24/09/2017", "devices" : [ { "type" : "ios", "n" : 2 } ] { "_id" : "23/09/2017", "devices" : [ { "type" : "ios", "n" : 2 }, { "type" : "Android", "n" : 1 } ] } { "_id" : "25/09/2017", "devices" : [ { "type" : "Android", "n" : 1 } ] } 

如果你真的想要的是你想要的输出:

 db.foo.aggregate([ {$group: {_id: "$date", iosCount: {$sum: {$cond: [ {$eq: [ "$deviceType","ios"]}, 1, 0 ] }}, androidCount: {$sum: {$cond: [ {$eq: ["$deviceType","Android"]}, 1, 0] }} }} ]); 

@嗡嗡Moschetti

如果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}] 

user1有数据2 android和1个Ios数据。 所以只有一个Android数据将被计数。