【问题标题】:Saving Nanosecond Timestamps in MongoDB (Generated by Go, Saved using Node.js)在 MongoDB 中保存纳秒时间戳(由 Go 生成,使用 Node.js 保存)
【发布时间】:2018-12-13 17:05:16
【问题描述】:

我正在尝试将 Unix 时间戳(以纳秒为单位)存储到 Mongodb 数据库的 Date 类型字段中。

以纳秒为单位的 unix 时间戳在 Go 程序中生成(使用time.Now().UnixNano()),提交给 Kafa 以由 Node.js 脚本读取,该脚本使用 mongoose 将包含以纳秒为单位的 unix 时间戳的有效负载对象写入Mongodb 商店。

但是这会引发错误

UnhandledPromiseRejectionWarning:ValidationError:交易验证失败:时间戳:Cast to Date 路径“timestamp”处的值“1544720051987010000”失败

有没有更好的方法在 Mongodb 中以纳秒为单位存储 unix 时间戳?

【问题讨论】:

  • 很好奇为什么不使用 Kafka Connect 框架来读取 Kafka 并写入 Mongo...
  • @cricket_007 我正在使用 Mongodb 事务,所以我选择了 Kafa 消费者而不是 Kafka 连接器。我在正确的轨道上吗?
  • 我对 Mongo 还不够熟悉,但我个人更喜欢尽可能少写代码以避免重复造轮子。如果 Mongo Java API 支持事务,那么我看不出 Kafka Connect 不能使用它们的原因。但是,如果您真的想要“恰好一次”交付,也应该在 Kafka 级别启用事务支持

标签: node.js mongodb go apache-kafka unix-timestamp


【解决方案1】:

我正在尝试将 Unix 时间戳(以纳秒为单位)存储到 Date 类型中 Mongodb 数据库的字段。尼西尼克斯

那是行不通的。


在内部,Date 对象存储为带符号的 64 位整数 表示自 Unix 纪元(1 月 1 日, 1970)。

MongoDB Reference: Date()


例如,

package main

import (
    "fmt"
    "time"
)

func main() {
    timestamp := time.Now().UnixNano() / int64(time.Millisecond)
    fmt.Println(timestamp)
}

游乐场:https://play.golang.org/p/21S_DeVA4jv

输出:

1257894000000

要存储 Unix 纳秒,请使用 long 数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多