在MongoDB中,如何将epoch之后的秒数转换为Datetimes?

MRo*_*lin 3 datetime mongodb

在MongoDB中,如何在查询之后将秒数转换为日期时间?

我正在寻找相当于以下Python函数

In [10]: datetime.utcfromtimestamp(1000000000)
Out[10]: datetime.datetime(2001, 9, 9, 1, 46, 40)
Run Code Online (Sandbox Code Playgroud)

我明白直接插入日期时间会更好,遗憾的是这不是我的情况.

特别是我正在使用聚合管道查询系统,因此最适合该框架的东西更可取.

Wiz*_*ard 6

聚合框架的算术运算符能够处理转换.
(在mongo shell上运行)

// initialize for test
var date = new Date();
date.setMilliseconds(0);
var epochSeconds = date.getTime() / 1000;
db.c.insert({date : date, epochSeconds : epochSeconds});

// perform test
var baseDate = new Date(0);
db.c.aggregate([{
    $project: {
        date : 1, 
        newDate : {
            $add : [ baseDate, {
                $multiply : [ "$epochSeconds", 1000 ]
            }]
        }
    }
}, 
// optional, just for easier to determine
{
    $project : {
        date : 1,
        newDate : 1,
        comparison : {
            $cond : {
                "if" : {
                    $eq : [ "$date", "$newDate" ]
                },
                "then" : "equal",
                "else" : "not equal"
            }
        }
    }
}]).pretty();
Run Code Online (Sandbox Code Playgroud)

输出如:

{
    "_id" : ObjectId("545460af6e66646769ae0a9d"),
    "date" : ISODate("2014-11-01T04:25:18Z"),
    "newDate" : ISODate("2014-11-01T04:25:18Z"),
    "comparison" : "equal"
}
Run Code Online (Sandbox Code Playgroud)