mongodb数组查询 - mongodb按日期聚合,计数
本文介绍了mongodb数组查询 - mongodb按日期聚合,计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
数据类型:
{'name':'tom','date':datetime.datetime(2017, 7, 1, 11, 35)}
{'name':'tom','date':datetime.datetime(2017, 7, 1, 12, 25)}
{'name':'tom','date':datetime.datetime(2017, 7, 3, 13, 32)}
{'name':'bob','date':datetime.datetime(2017, 7, 1, 15, 37)}
{'name':'bob','date':datetime.datetime(2017, 7, 2, 9, 15)}
{'name':'sue','date':datetime.datetime(2017, 7, 1, 17, 15)}
{'name':'sue','date':datetime.datetime(2017, 7, 2, 12, 25)}
想要按照日期来进行聚合统计出每个人每天有几条记录,
希望结果是这样的:
{'date':'2017-7-1','name':['tom':1,'bob':1,'sue':1]}
{'date':'2017-7-2','name':['bob':1,'sue':1]}
{'date':'2017-7-3','name':['bob':1,'sue':1]}
困惑了好几天了,按照日期来分组弄出来了,但是计数不晓得怎么弄
db.coll.aggregate([
{'$group':{'_id':{'$dateToString':{'format':'%Y-%m-%d','date':'$date'}}}}
])
这样把日期给分组了,但是对‘name’进行计数,却不晓得怎么弄
谢谢楼下两位的回答,这样已经解决了问题。
抱歉上面的格式错了,应该是这个
{'date':'2017-7-1','name':{'tom':1,'bob':1,'sue':1}}
我用的python,另外定义一个函数就可以转换过来了.
格式从语言层面就可以解决了,
s=[{ "_id" : "2017-08-03", "name" : [ { "name" : "tom", "count" : 1 } ] },
{ "_id" : "2017-08-01", "name" : [ { "name" : "sue", "count" : 1 }, { "name" : "bob", "count" : 1 }, { "name" : "tom", "count" : 2 } ] },
{ "_id" : "2017-08-02", "name" : [ { "name" : "sue", "count" : 1 }, { "name" : "bob", "count" : 1 } ] }]
def db_dict(s):
dicts=[]
for line in s:
res_dict={}
for x in line.get('name'):
names=x.get('name')
values=x.get('count')
res_dict[names]=values
res=dict(dates=line.get('_id'),count=res_dict)
dicts.append(res)
return dicts
函数执行完的结果
就得到想要的格式了
[{'dates': '2017-08-03', 'count': {'tom': 1}},
{'dates': '2017-08-01', 'count': {'tom': 2, 'bob': 1, 'sue': 1}},
{'dates': '2017-08-02', 'count': {'bob': 1, 'sue': 1}}]
解决方案
我只能做到这样.
我不知道如何将查询出来的值作为一个对象的键,也就是,我不知道如何动态拼接对象
源数据
db.getCollection('test').insert([{'name':'tom','date':'2017-7-1'},
{'name':'tom','date':'2017-7-1'},
{'name':'tom','date':'2017-7-3'},
{'name':'bob','date':'2017-7-1'},
{'name':'bob','date':'2017-7-2'},
{'name':'sue','date':'2017-7-1'},
{'name':'sue','date':'2017-7-2'}
])
SQL 语句
db.getCollection('test').aggregate([
{
$group: {
_id: {
'name': '$name',
'date': '$date'
},
count: { $sum: 1 }
}
},{
$project: {
'_id': 0,
'date': '$_id.date',
'name': {
'name': '$_id.name',
'count': '$count'
}
}
},{
$group: {
_id: '$date',
'name': {$push: '$name'}
}
}
])
查询结果
/* 1 */
{
"_id" : "2017-7-3",
"name" : [
{
"name" : "tom",
"count" : 1.0
}
]
}
/* 2 */
{
"_id" : "2017-7-1",
"name" : [
{
"name" : "sue",
"count" : 1.0
},
{
"name" : "bob",
"count" : 1.0
},
{
"name" : "tom",
"count" : 2.0
}
]
}
/* 3 */
{
"_id" : "2017-7-2",
"name" : [
{
"name" : "sue",
"count" : 1.0
},
{
"name" : "bob",
"count" : 1.0
}
]
}
这篇关于mongodb数组查询 - mongodb按日期聚合,计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文