基于unix时间戳的Mongodb聚合
发布时间:2020-12-15 18:57:34 所属栏目:安全 来源:网络整理
导读:我用谷歌搜索了很多,但没有找到任何有用的解决方案……我想找到每日用户的总数. 我有一个名为session_log的集合,其中包含以下文档 { "_id" : ObjectId("52c690955d3cdd831504ce30"),"SORTID" : NumberLong(1388744853),"PLAYERID" : 3,"LASTLOGIN" : NumberL
我用谷歌搜索了很多,但没有找到任何有用的解决方案……我想找到每日用户的总数.
我有一个名为session_log的集合,其中包含以下文档 { "_id" : ObjectId("52c690955d3cdd831504ce30"),"SORTID" : NumberLong(1388744853),"PLAYERID" : 3,"LASTLOGIN" : NumberLong(1388744461),"ISLOGIN" : 1,"LOGOUT" : NumberLong(1388744853) } 我想从LASTLOGIN汇总… 这是我的查询: db.session_log.aggregate( { $group : { _id: { LASTLOGIN : "$LASTLOGIN" },count: { $sum: 1 } }} ); 但它是按每个登录时间聚合,而不是每天.任何帮助,将不胜感激
MongoDB 3.0及更新版本:
db.session_log.aggregate([ { "$group": { "_id": { "$dateToString": { "format": "%Y-%m-%d","date": { "$add": [ new Date(0),{ "$multiply": [1000,"$LASTLOGIN"] } ] } } },"count": { "$sum": 1 } } } ]) 您需要通过将值乘以1000将LASTLOGIN字段转换为毫秒时间戳 { "$multiply": [1000,"$LASTLOGIN"] } ,然后转换为日期 "$add": [ new Date(0),"$LASTLOGIN"] } ] 这可以在 因此,您应该将聚合管道更改为: var project = { "$project":{ "_id": 0,"y": { "$year": { "$add": [ new Date(0),"$LASTLOGIN"] } ] } },"m": { "$month": { "$add": [ new Date(0),"d": { "$dayOfMonth": { "$add": [ new Date(0),"$LASTLOGIN"] } ] } } } },group = { "$group": { "_id": { "year": "$y","month": "$m","day": "$d" },"count" : { "$sum" : 1 } } }; 运行聚合管道: db.session_log.aggregate([ project,group ]) 会给出以下结果(基于样本文件): { "_id" : { "year" : 2014,"month" : 1,"day" : 3 },"count" : 1 } 改进将是在单个管道中运行上述内容 var group = { "$group": { "_id": { "year": { "$year": { "$add": [ new Date(0),"$LASTLOGIN"] } ] } },"mmonth": { "$month": { "$add": [ new Date(0),"day": { "$dayOfMonth": { "$add": [ new Date(0),"$LASTLOGIN"] } ] } } },"count" : { "$sum" : 1 } } }; 运行聚合管道: db.session_log.aggregate([ group ]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angularjs – 在compiler_1中获取ERROR.StaticSymbolResolv
- killws 利用xfire部署webservice (xfire1.6+spring1.6+mave
- shell – 在服务器上运行java jar文件作为后台进程
- 将嵌套的Scala类型转换为Java类型
- 从angular2中的新行开始文本
- bash – 如何启动tmux与几个窗口在不同的目录?
- 我应该在哪里将Bearer令牌注入AngularJS中的$http?
- 【bootstrap】--- 动态给select赋值(未完)
- AngularJS的学习--$on、$emit和$broadcast的使用
- BootStrap组件