如何在mongo聚合中将ISODate转换为unix时代

时间:2018-03-31 02:07:15

标签: mongodb aggregation-framework

我在mongo中有一个ISODate字段。 有没有简单的方法将其转换为unix时间戳?

即:  ISODate(“2018-03-30T13:06:05.739-07:00”)=> 1522440365739

2 个答案:

答案 0 :(得分:1)

事实证明,您需要先使用减法方法将其转换为NumberLong:

即:

db.collection.aggregate([{
  $project: {date: {$subtract: ['$date', new Date(0)]}}
}])

如果您希望将其作为字符串,则需要使用substr转换它:

db.collection.aggregate([{
  $project: {
    date: {$substr: [{$subtract: ['$date', new Date(0)]}, 0, -1]}
  }
}])

答案 1 :(得分:1)

从4.0开始,您可以使用$toDecimal。对于当今的大多数时间戳来说,$toInt太小了。

db.collection.aggregate([{
  $project: {
    date: {'$toDecimal': '$date'}
  }
}])

这将返回毫秒中的Unix时间戳。要转换为秒,请使用$divide的{​​{1}}

https://docs.mongodb.com/manual/reference/operator/aggregation/toDecimal/