首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >聚合中的Mongo项目错误

聚合中的Mongo项目错误
EN

Stack Overflow用户
提问于 2014-02-27 12:51:47
回答 2查看 170关注 0票数 2

当日期以类似于project的格式出现时,Mongo YYYY-01-01会产生错误。

在蒙古的日期

代码语言:javascript
运行
复制
[pd] => MongoDate Object
    (
        [sec] => 946665000
        [usec] => 0
    )
[pn] => JP2000285176A

PHP返回

代码语言:javascript
运行
复制
date('Y-m-d',946665000) => 2000-01-01

MongoDB聚合

代码语言:javascript
运行
复制
db.patents.aggregate({'$match':{'pn':'JP2000285176A'}},{'$project':{'pn':1,'pd':{'$year':'$pd'}}})

结果

代码语言:javascript
运行
复制
{
"result" : [
    {
        "_id" : ObjectId("530dce78b25d9d526f44e104"),
        "pd" : 1999,
        "pn" : "JP2000285176A"
    }
],
"ok" : 1
}

聚合返回1999而不是2000

更新

未解决问题

在查询时,时区支持日期运算符

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-27 13:22:54

我认为这是一个与时区有关的问题。

有关可能的解决方案,请参见如何在不同时区按年月日累积

票数 4
EN

Stack Overflow用户

发布于 2014-02-28 06:32:22

就像您在问题中更新的一样,这个问题已经在服务器-6310中讨论过了,将在2.7所需版本中解决。

现在,由于所有时间都存储在Mongodb中的UTC中,所以可以使用$project将时间转移到时区。要增加时间,就有$add,要减去时间,就需要$subtract。请注意,加/减必须以毫秒*60*60*1000进行。

例如,在您的例子中,由于您来自India+5:30,您可以将5:30小时添加到UTCor格林尼治标准时间。

代码语言:javascript
运行
复制
db.patents.aggregate(
           {'$match':{'pn':'JP2000285176A'}},
           {'$project':{'pn':1,'pd':{'$year':{$add:['$pd',5.5*60*60*1000]}}}}
)

参考文献

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22069088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档