MongoDB根据时间aggregate示例
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,需要对下面的集合根据LastUpdate按天分组累加TranslateFields值。rs_test:SECONDARY> db.new_result.find(); { "_id" : Obje
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
网络安全技术管理师好考吗
专业软件开发过程服务标准
重点就办公安全和网络安全
大余软件开发项目管理
香港美国服务云服务器
保定市微云网络技术有限公司
网络安全的四个基本目标
数据库工程师头像女高级
湖南诺源互联网科技有限公司
万得宏观数据库提取量限制
服务器远程桌面安全设置
客户端直连数据库是否安全
网络安全约谈记录会有影响吗
网络安全周知识
数据库的常用资源
有内鬼游戏手游服务器断开
广州紫沛互联网科技
泰山服务器电脑版
实用网络技术教材
银行防盗软件开发是什么职位
数据库实体类的创建
企业微信接收邮件服务器
附加的数据库有代码吗
国家网络技术最高级别
中国网络安全大赛与电子竞技
网络安全生产大检查汇报
网络安全规划咨询
电阻屏 软件开发
软件出问题只能改数据库
通讯协议软件开发