首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >聚合$project中的new Date()

聚合$project中的new Date()
EN

Stack Overflow用户
提问于 2013-02-21 04:14:44
回答 3查看 20.7K关注 0票数 20

对于我的一个集合,它必须保留unix时间戳而不是isodate,我通常会将时间戳转换为新的日期(Unix_timestamp)。

现在,我需要聚合中的new Date(ts)。(示例用PHP编写)

'$project‘=>数组(’‘=> '$new Date(ts)',...

'$group‘=>数组( "_id“=>数组(’_id‘=> '$day)',...),...

不会出现在结果中。结果中的字段"day“完全缺失。

如何在聚合中进行转换?

EN

回答 3

Stack Overflow用户

发布于 2014-05-28 19:21:07

为了能够从文档中添加时间戳字段,您可以这样做,给定:

代码语言:javascript
复制
{"ts": 1400512120100}

要聚合为日期,请执行以下操作:

代码语言:javascript
复制
db.foo.aggregate({
   $project: {
       date: { $add: [new Date(0), "$ts"] }
   }
})
票数 26
EN

Stack Overflow用户

发布于 2013-02-21 05:09:05

对于投影中的其他计算字段,您需要使用$add运算符,如下所示:(控制台示例)

代码语言:javascript
复制
db.so.aggregate([{$project: {date: {$add: Date() }}}])

但这是错误的,我们会得到一个错误消息:

代码语言:javascript
复制
exception: $add does not support strings (or dates)

但我发现了一个简单的hack =)

代码语言:javascript
复制
db.so.aggregate([{$project: {date: {$substr: [Date(), 0, -1] }}}])

在这种情况下,我们会得到预期的结果和日期,在PHP输出中,你可以看到这样的错误:

代码语言:javascript
复制
exception: disallowed field type Date in object expression (at 'date')

现在,解决方案(php 5.4语法):

代码语言:javascript
复制
$so->aggregate([
    ['$project' => ["date" => ['$substr' => [new MongoDate(), 0, -1]] ] ]
]);
票数 3
EN

Stack Overflow用户

发布于 2019-06-20 04:01:01

启动Mongo 4.0时,可以使用$toDate聚合运算符来实现:

代码语言:javascript
复制
// { "ts": 1400512120100 }
db.collection.aggregate({ $project: { date: { $toDate: "$ts" } } })
// { "date": ISODate("2014-05-19T15:08:40.100Z") }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14989058

复制
相关文章

相似问题

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