Mongo项目聚合错误

时间:2014-02-27 12:51:47

标签: mongodb mongodb-query aggregation-framework

当日期格式为project

时,Mongo YYYY-01-01会出错

Mongo中的日期

[pd] => MongoDate Object
    (
        [sec] => 946665000
        [usec] => 0
    )
[pn] => JP2000285176A

PHP日期返回

date('Y-m-d',946665000) => 2000-01-01

MongoDB聚合

db.patents.aggregate({'$match':{'pn':'JP2000285176A'}},{'$project':{'pn':1,'pd':{'$year':'$pd'}}})

结果

{
"result" : [
    {
        "_id" : ObjectId("530dce78b25d9d526f44e104"),
        "pd" : 1999,
        "pn" : "JP2000285176A"
    }
],
"ok" : 1
}

汇总返回 1999 而不是 2000

更新

未解决的问题

Timezone support in date operators at query time

2 个答案:

答案 0 :(得分:4)

我认为这是与时区相关的问题。

请参阅How to agregate by year-month-day on a different timezone了解可能的解决方案。

答案 1 :(得分:1)

与您在问题中的更新一样,此问题已在SERVER-6310中讨论,将在版本2.7 desired中解决。

现在,由于所有时间都以UTC格式存储在Mongodb中,因此您可以使用$project将时间转移到您的时区。要增加时间,请$add并减去$subtract的时间。请注意,加法/减法必须以毫秒[小时* 60 * 60 * 1000]完成。

例如,在您的情况下,由于您来自印度[+5:30],您可以将5:30小时添加到UTC [或GMT]。

db.patents.aggregate(
           {'$match':{'pn':'JP2000285176A'}},
           {'$project':{'pn':1,'pd':{'$year':{$add:['$pd',5.5*60*60*1000]}}}}
)

#REF