Python pymong群与计数
假设我有一个集合,其中包含一些日志条目50^6,为了提取一些统计信息,我希望将其缩写为提示 下面是我收藏的一个文档的示例。我刚刚留下了相关信息Python pymong群与计数,python,mongodb,pymongo,Python,Mongodb,Pymongo,假设我有一个集合,其中包含一些日志条目50^6,为了提取一些统计信息,我希望将其缩写为提示 下面是我收藏的一个文档的示例。我刚刚留下了相关信息 { 'prg': 'blastall', 'uid': '7225', 'version': '2.2.21', 'date': datetime.datetime(2013, 12, 1, 0, 0), '_id': ObjectId('54948dbdff4346034c23ae8d'), 'pack': 'blast'
{
'prg': 'blastall',
'uid': '7225',
'version': '2.2.21',
'date': datetime.datetime(2013, 12, 1, 0, 0),
'_id': ObjectId('54948dbdff4346034c23ae8d'),
'pack': 'blast'
}
注意,不同的prg可能属于一个包
我想为给定的两个包/版本提取以下信息。
收藏中的眼睛数量
使用此程序包/版本的uid的列表
所用程序的列表
目前我是这样做的
satrt、end是限制要处理的时段间隔的日期时间
pack_ag = col.aggregate([
{'$match': {"date": {'$gte':start, '$lt': end}}},
{'$project' : {'pack':1, 'version':1, 'prg':1, 'uid':1}},
{'$group' :{"_id":{"pack":"$pack", "version":"$version"}, 'hits': {'$sum': 1}, 'progs': { '$addToSet': "$prg"}, 'users': {'$addToSet': '$uid'}}}])
它给了我期望的东西-
{
'progs': ['blastall', 'formatdb', 'megablast'],
'hits': 1212,
'_id': {'version': '2.2.21', 'pack': 'blast'},
'users': ['7225', '1234', '9876]
}
我想缩写的是在progs列表中存储程序使用的信息。
比如说:
progs': [{'blastall': 1000}, {'formatdb': 200}, {'megablast':12}]
我必须承认,目前我不知道如何以其他方式执行任务,除了循环结果、查找和统计匹配pack/version/prg的文档,然后更新文档
有没有办法在momgo查询级别完成此操作 您完全可以聚合结果,但不完全按照预期的格式,如下所示:
progs': [{'blastall': 1000}, {'formatdb': 200}, {'megablast':12}]
但非常接近,这肯定是有用的,很容易检索
获取包组合的唯一程序数
和版本、组、包装、版本和prg上的记录。
每组中的$sum运算符将给出每个唯一组的计数
prg。保留对每个prg记录列表的参考。
现在,根据rec字段展开分组记录。
项目prg_详细信息作为包含prg名称的对象,以及
它对每一条记录都很重要。
仅按包和版本将未缠绕的记录分组
属性,并将用户和程序项累积为唯一列表。
修改代码:
col.aggregate([
{$match: {"date": {$gte:start, $lt: end}}},
{$group:{"_id":{"pack":"$pack","version":"$version","prg":"$prg"},
"count":{$sum:1},"rec":{$push:"$$ROOT"}}},
{$unwind:"$rec"},
{$project:{"pack":"$_id.pack","version":"$_id.version",
"prg_detail":{"name":"$_id.prg","count":"$count"},"rec":1}},
{$group:{"_id":{"pack":"$pack",
"version":"$version"},
"progs":{$addToSet:"$prg_detail"},
"hits":{$sum:1},
"users":{$addToSet:"$rec.uid"}}}])
订单样本:
{
"_id" : {
"pack" : "blast",
"version" : "2.2.21"
},
"progs" : [
{
"name" : "blastall",
"count" : 1
},
{
"name" : "formatDB",
"count" : 2
},
{
"name" : "megaBlast",
"count" : 1
}
],
"hits" : 4,
"users" : [
"7225",
"7229",
"7226",
"7227"
]
}