Node.js mongoDB中如何使用聚合函数计算唯一数据

Node.js mongoDB中如何使用聚合函数计算唯一数据,node.js,mongodb,aggregation-framework,aggregate,Node.js,Mongodb,Aggregation Framework,Aggregate,这是存储在mongoDB中的输入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' }, { 'na

这是存储在mongoDB中的输入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
 }
]
输出是

输出

[{
  '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
 }
]
我使用了聚合函数来执行任务。 假设集合名称为users,则

db.users.aggregate([{'$group':{
                               '_id':{'date':'$date','name':'$name'},
                              'count':{'$sum' :1}
                              }
                    }])
此聚合函数的输出未返回适当的结果

让我们进一步解释我只感兴趣的日期假设2017年8月23日有多少用户,他们使用的是哪种类型的设备,ios或android不算设备。比如说

如果日期“2017年9月23日”有如下输入数据

[{'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':2017年9月23日,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 }

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

输出应采用此格式[{'date':'23/09/2017','iosCount':2','androidCount':1},{'date':'24/09/2017','iosCount':2','androidCount':0},{'date':'25/09/2017','iosCount':0',androidCount 1}]输出应采用此格式[{'date':'23/09/2017','iosCount':2','androidCount':1},{'date':'24/09/2017','iosCount':2','androidCount':0},{'date':'25/09/2017','iosCount':0,'androidCount':1}]