我对当前正在进行的项目有一个mongo问题需要你的帮助。
以下是我的问题:
我将用户日志数据存储为样本:
db.visitors集合
[
{
uid: "0001",
logPath: "/home",
logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)"
},
{
uid: "0002",
logPath: "/",
logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)"
},
{
uid: "0001",
logPath: "/product",
logTime: "Mon Dec 27 2010 18:51:23 GMT+0000 (UTC)"
},
{
uid: "0001",
logPath: "/order",
logTime: "Mon Dec 28 2010 18:51:23 GMT+0000 (UTC)"
}
]
我需要按日期(2010年12月28日星期一至2010年12月27日星期一之间)对我的访问用户进行分组
尝试查找uid为0001且group:
的用户日志[
{
date: "Mon Dec 28",
log: [
{
logPath: '/order'
}
]
},
{
date: "Mon Dec 27",
log: [
{
logPath: '/home'
},
{
logPath: '/product'
}
]
}
]
请指导我如何分组
答案 0 :(得分:1)
db.aggregate([
{$match: {uid: "0001", logTime: {$gte: ISODate('Mon Dec 27 2010'), $lt: ISODate("Mon Dec 29 2010")}}},
{$project:
{day: {'$dayOfMonth': '$logTime'},month: {'$month':'$logTime'},year: {'$year':'$logTime'} }
},
{$group: {
_id: {day:'$day',month:'$month',year:'$year'},
log: {$push:{logPath:'$logPath'}}
}}
])
这样的事情应该可以解决问题。如果您想仅按月分组,则可以从day
的{{1}}中取出_id
字段。
还有另一种做日期的方式,但我必须承认这种方式可能是目前最简单的方法。