MongoDB根据时间aggregate示例
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,需要对下面的集合根据LastUpdate按天分组累加TranslateFields值。rs_test:SECONDARY> db.new_result.find(); { "_id" : Obje
千家信息网最后更新 2025年01月20日MongoDB根据时间aggregate示例
需要对下面的集合根据LastUpdate按天分组累加TranslateFields值。
rs_test:SECONDARY> db.new_result.find(); { "_id" : ObjectId("57fb0756e31f84a56ed41889"), "LastUpdate" : ISODate("2016-09-02T01:35:02.471Z"), "TranslateFields" : 9 } { "_id" : ObjectId("57fb0756e31f84a56ed4188a"), "LastUpdate" : ISODate("2016-09-05T11:13:28.344Z"), "TranslateFields" : 10 } { "_id" : ObjectId("57fb0756e31f84a56ed4188b"), "LastUpdate" : ISODate("2016-09-05T09:26:41.016Z"), "TranslateFields" : 33 } { "_id" : ObjectId("57fb0756e31f84a56ed4188c"), "LastUpdate" : ISODate("2016-09-02T13:34:50.114Z"), "TranslateFields" : 12 } { "_id" : ObjectId("57fb0756e31f84a56ed4188d"), "LastUpdate" : ISODate("2016-08-26T03:49:52.369Z"), "TranslateFields" : 17 }
如果是在SQL Server里,分组统计应该像这样写:
SELECT CONVERT(varchar,LastUpdate,112),SUM(TranslateFields) FROM dbo.new_result GROUP BY CONVERT(varchar,LastUpdate,112) ORDER BY 1;
那么在MongoDB里,有3种聚合方法:group、aggregate和mapReduce
//2.6版本aggregate方法 db.new_result.aggregate( { $group : { _id : { year: { $year: "$LastUpdate" }, month: { $month: "$LastUpdate" }, day: { $dayOfMonth: "$LastUpdate" } }, totalTime: { $sum: "$TranslateFields" } } }, { $sort : { "_id.year": 1, "_id.month": 1, "_id.day": 1 } } )
//3.0版本aggregate方法 db.new_result.aggregate( { $group : { yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$LastUpdate" } }, totalTime: { $sum: "$TranslateFields" } } }, { $sort : { "yearMonthDay": 1 } } )
//group方法 db.new_result.group({ keyf : function(doc){ var date = new Date(doc.LastUpdate); var dateKey = ""+date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate(); return {'day':dateKey}; }, initial : {"time":0}, reduce : function(doc, prev){ prev.time += doc.TranslateFields; }, finalize : function Finalize(out) { return out; } } });
//先存为日期 //1 db.tmp_result.find({"value.Status":3},{"value.TranslateFields":1,"value.LastUpdate":1}).forEach( function(item){ db.new_result.save({"LastUpdate":item.value.LastUpdate.getFullYear()+"-"+ (item.value.LastUpdate.getMonth()+1)+"-"+ item.value.LastUpdate.getDate(), "TranslateFields":item.value.TranslateFields}); } ) //2 db.new_result.aggregate( { $group : { _id:"$LastUpdate", totalTime: { $sum: "$TranslateFields" } } } ,{"$sort":{"_id":1}} )
对于aggregate方法,最好在$group之前$match,减少数据量,如果过滤的键上有索引,查询也会走索引。
db.TranslateTicket.aggregate( { "$match": { "LastUpdate": {"$gte":ISODate("2016-06-19T00:00:00.000Z"), "$lt":ISODate("2016-09-19T00:00:00.000Z")}, "Status": 3 } }, { "$group": { _id : { month: { $month: "$LastUpdate" }, day: { $dayOfMonth: "$LastUpdate" }, year: { $year: "$LastUpdate" } }, totalTime: { $sum: "$CharactersCount" } } }, { "$sort": { "_id.year":1,"_id.month":1,"_id.day":1 } } )
这种情况,最好在创建如下索引:
db.TranslateTicket.createIndex({"LastUpdate":1,"Status":1},{background:1})
方法
索引
最好
版本
分组
情况
数据
日期
是在
面的
查询
统计
时间
示例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
无限宝服务器错误
网络技术有限公司能做电商吗
商品售卖系统数据库设计
普华软件开发有限公司
成都蓝牙软件开发
服务器系统硬盘位置
青岛羚羊网络技术服务有限公司
外国十大热门网络安全公司
广东调度服务器安装虚拟主机
bartender结合数据库
服务器管理器的作用
蚂蚁金服成为数据库公司
方舟手游怎样卡服务器
浙江服务器机柜哪里买
数据库字段类型修改
岗位软件测试与软件开发
U8当前数据库无可用资源
深圳社交直播软件开发
数据库维护中的快照技术
网络中提供服务的机器称为服务器
电脑网络无法显示共享服务器
网络技术有限公司能做电商吗
第三章数据库习题答案
网络安全 系统
对于目前的无网络技术来说
谷歌地球数据库 香港
服务器间网络通讯错误是什么意思
网络安全初中综合实践课
江苏储运仓储软件开发
网络技术及应用课程标准