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

时间:2017-09-29 13:27:53

标签: node.js mongodb aggregation-framework aggregation

我是mongoDB的新手。

  

我们必须显示输出数据

     
      
  1. 按日期划分的唯一用户数。

  2.   
  3. Android用户和Ios用户数。

  4.   

这是输入JSON数据

输入

[{
  '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
 }
]

2 个答案:

答案 0 :(得分:1)

这是一个解决方案,它对设备类型保持中立。如果添加更多,则agg管道将适应新值。

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

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

leap-day

答案 1 :(得分:1)

@ Buzz Moschetti

如果日期" 23/09 / 2017"有输入数据,如

[{'date' : 23/09/2017, totalIos : 2, totalAndroid: 1}]

输出

{{1}}

user1拥有数据2个android和1个Ios数据。所以只有1个Android数据会被计算在内。