Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb集合中的按日期分组_Mongodb - Fatal编程技术网

mongodb集合中的按日期分组

mongodb集合中的按日期分组,mongodb,Mongodb,我有一个mongo的问题,目前正在工作的项目需要你的帮助 以下是我的问题: 我已将我的用户日志数据存储为示例: db.访客收集 [ { uid: "0001", logPath: "/home", logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)" }, { uid: "0002", logPath: "/", logTime

我有一个mongo的问题,目前正在工作的项目需要你的帮助

以下是我的问题:

我已将我的用户日志数据存储为示例:

db.访客收集

 [
    {
        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,这意味着它将尝试将整个集合投影到内存中,然后对其进行完整的表扫描。至于阅读它,它在聚合框架文档中的某个地方,我记不清确切的位置