在MongoDB中,我如何将纪元后的秒数转换为日期时间?

4
在MongoDB中,我该如何将自纪元后的秒数转换为日期时间并在查询中使用?
我正在寻找以下Python函数的等效函数。
In [10]: datetime.utcfromtimestamp(1000000000)
Out[10]: datetime.datetime(2001, 9, 9, 1, 46, 40)

我知道直接插入日期时间会更好,但很遗憾这并不适用于我的情况。

我特别使用聚合管道查询系统,因此最好适应该框架的内容。


1
你想要达成的更大目标是什么?你想改变数据还是进行某些特定查询? - wdberkeley
我想进行一个查询,而不是更改数据。但是我正在构建一个工具,因此通用解决方案更可取。我会进行编辑。 - MRocklin
这是在JavaScript服务器函数中吗?您应该能够执行new Date(unixTime*1000)以获取JS日期对象(*1000是因为JS希望此值以毫秒为单位)。 - Ken Egozi
我想通过聚合管道查询系统来实现这一目标。 - MRocklin
1个回答

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();

输出如下:
{
    "_id" : ObjectId("545460af6e66646769ae0a9d"),
    "date" : ISODate("2014-11-01T04:25:18Z"),
    "newDate" : ISODate("2014-11-01T04:25:18Z"),
    "comparison" : "equal"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接