如何计算mongoDB中唯一数据的数量
我在mongoDB中是非常新的初学者。
我们必须显示输出数据
用户按date的唯一编号。
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数据将被计数。