当日期以类似于project的格式出现时,Mongo YYYY-01-01会产生错误。
在蒙古的日期
[pd] => MongoDate Object
(
[sec] => 946665000
[usec] => 0
)
[pn] => JP2000285176APHP返回
date('Y-m-d',946665000) => 2000-01-01MongoDB聚合
db.patents.aggregate({'$match':{'pn':'JP2000285176A'}},{'$project':{'pn':1,'pd':{'$year':'$pd'}}})结果
{
"result" : [
{
"_id" : ObjectId("530dce78b25d9d526f44e104"),
"pd" : 1999,
"pn" : "JP2000285176A"
}
],
"ok" : 1
}聚合返回1999而不是2000
更新
未解决问题
发布于 2014-02-27 13:22:54
我认为这是一个与时区有关的问题。
有关可能的解决方案,请参见如何在不同时区按年月日累积。
发布于 2014-02-28 06:32:22
就像您在问题中更新的一样,这个问题已经在服务器-6310中讨论过了,将在2.7所需版本中解决。
现在,由于所有时间都存储在Mongodb中的UTC中,所以可以使用$project将时间转移到时区。要增加时间,就有$add,要减去时间,就需要$subtract。请注意,加/减必须以毫秒*60*60*1000进行。
例如,在您的例子中,由于您来自India+5:30,您可以将5:30小时添加到UTCor格林尼治标准时间。
db.patents.aggregate(
{'$match':{'pn':'JP2000285176A'}},
{'$project':{'pn':1,'pd':{'$year':{$add:['$pd',5.5*60*60*1000]}}}}
)参考文献
https://stackoverflow.com/questions/22069088
复制相似问题