在mongoDB中按日期字段聚合产生奇怪的结果

时间:2014-01-24 12:17:55

标签: mongodb mongoose

我正在使用猫鼬。这是我的聚合代码:

var query = { created: { '$gte': Thu Jan 23 2014 00:00:00 GMT+0100 (CET) } }
Model.aggregate([
    { $match: query },
    { $group: {
        _id: {
            day: { $dayOfMonth: '$created' },
            month: { $month: '$created' },
            year: { $year: '$created' },
        },
        amount: { $sum: 1 },
    date: { $min: '$created' },
     }}],
        function(err,result){
            console.log(result);
        }
    );

此代码按created字段对过滤器模型进行分组,然后按created字段对它们进行分组(并计数)。结果是:

[ { _id: { day: 24, month: 1, year: 2014 },
    amount: 13,
    date: Fri Jan 24 2014 06:46:57 GMT+0100 (CET) },
  { _id: { day: 23, month: 1, year: 2014 },
    amount: 46,
    date: Thu Jan 23 2014 02:52:24 GMT+0100 (CET) },
  { _id: { day: 22, month: 1, year: 2014 },
    amount: 1,
    date: Thu Jan 23 2014 00:18:18 GMT+0100 (CET) } ]

为什么将Thu Jan 23 2014 00:18:18 GMT+0100日期归为{ day: 22, month: 1, year: 2014 } ???我想这可能与时区有关?

1 个答案:

答案 0 :(得分:0)

你猜对了。这些日期按UTC时间划分。

如果所有值都来自同一时区(例如CET),并且您希望在该区域中按天计算,则可以为日期值添加秒数(CET为+3600)。 如果您有来自许多时区的值,那么您需要考虑如何汇总结果。

有关该主题和一些可用的解决方法的讨论,请参阅以下Jira票证(SERVER-6310)。