在mongodb集合中按日期分组

时间:2013-07-02 09:55:14

标签: mongodb

我对当前正在进行的项目有一个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'
            }
        ]
    }
]

请指导我如何分组

1 个答案:

答案 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字段。

还有另一种做日期的方式,但我必须承认这种方式可能是目前最简单的方法。