如何使用聚合函数计算mongoDB中的唯一数据

时间:2017-09-30 02:53:16

标签: node.js mongodb aggregation-framework aggregate

这是输入JSON数据,存储在mongoDB中,如此

输入

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

此聚合函数的输出不会返回适当的结果。

  

让我们解释一下我感兴趣的日期只有23/08/2017有多少用户和他们使用的设备类型ios或android不计算设备。让我们说像

这样的例子      

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

     

[{'名称' :' user1',' date' :' 23/09 / 2017',' deviceType' :' Android'},

     

{'名称' :' user1',' date' :' 23/09 / 2017',' deviceType' :' IOS'},

     

{'名称' :' user1',' date' :' 23/09 / 2017',' deviceType' :' Android'},

     

{'名称' :' user2',' date':' 23/09 / 2017',' deviceType':' ios'} ]

     

输出

     

[{'日期' :2017年9月23日,总数:2,总安德烈:1}]

1 个答案:

答案 0 :(得分:0)

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