当日期格式为project
YYYY-01-01
会出错
[pd] => MongoDate Object
(
[sec] => 946665000
[usec] => 0
)
[pn] => JP2000285176A
PHP日期返回
date('Y-m-d',946665000) => 2000-01-01
db.patents.aggregate({'$match':{'pn':'JP2000285176A'}},{'$project':{'pn':1,'pd':{'$year':'$pd'}}})
结果
{
"result" : [
{
"_id" : ObjectId("530dce78b25d9d526f44e104"),
"pd" : 1999,
"pn" : "JP2000285176A"
}
],
"ok" : 1
}
汇总返回 1999 而不是 2000
未解决的问题
答案 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]}}}}
)