如何在 mongo 聚合中将 ISODate 转换为 unix 纪元

met*_*gfu 5 mongodb aggregation-framework

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

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

All*_*Lei 6

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

db.collection.aggregate([{
  $project: {
    date: {'$toDecimal': '$date'}
  }
}])
Run Code Online (Sandbox Code Playgroud)

这将返回以毫秒为单位的 unix 时间戳。要转换为秒,请使用$divideby1000

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


met*_*gfu 4

结果你需要首先使用减法将其转换为 NumberLong:

IE:

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

如果您希望这是一个字符串,则需要使用 substr 进行转换:

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