Node.js mongoDB中如何使用聚合函数计算唯一数据
这是存储在mongoDB中的输入JSON数据,如下所示 输入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
[{
'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}]