mongodb集合中的按日期分组
我有一个mongo的问题,目前正在工作的项目需要你的帮助 以下是我的问题: 我已将我的用户日志数据存储为示例: db.访客收集mongodb集合中的按日期分组,mongodb,Mongodb,我有一个mongo的问题,目前正在工作的项目需要你的帮助 以下是我的问题: 我已将我的用户日志数据存储为示例: db.访客收集 [ { uid: "0001", logPath: "/home", logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)" }, { uid: "0002", logPath: "/", logTime
[
{
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且组为的用户的日志:
[
{
date: "Mon Dec 28",
log: [
{
logPath: '/order'
}
]
},
{
date: "Mon Dec 27",
log: [
{
logPath: '/home'
},
{
logPath: '/product'
}
]
}
]
请指导我如何分组
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'}}
}}
])
像这样的事情应该会奏效。如果您只想按月份分组,则可以从$group
的\u id
中取出天
字段
还有另一种方法来做日期,但我必须承认,这种方法目前可能是最简单的。日期真的是字符串吗?日期对象中的所有日期如果你想的话--你可以省略
{$project:…}
步骤,因为{$dayOfMonth:…}
操作符等在{$group:…}
@Conrad,虽然我(个人)认为完全公平看起来很难。嘿--你知道在{$match:..}
中是否可以使用它们吗?我一直想避免使用ISODate()
@Conrad.Dean进行过滤,但是,如果您先取出部件,然后执行$match
管道…但是使用索引会丢失索引,我认为这是不可能的,$match
是查找()的直接原型
@Conrad.Dean您将得到的索引损失是,没有索引可用于进行$match,这意味着它将尝试将整个集合投影到内存中,然后对其进行完整的表扫描。至于阅读它,它在聚合框架文档中的某个地方,我记不清确切的位置