Golang在MongoDB中插入当前日期的方法

Golang在MongoDB中插入当前日期的方法 你好。有没有办法在单次操作中插入一个包含当前日期的文档?我正在使用 Mongo-driver。

我不知道应该使用哪种类型,以及应该为 Timestamp 字段分配什么值。

我使用的是 Date 类型验证,所以我需要的值类似这样:

ISODate("2012-07-14T01:00:00+01:00")
type Packet struct {
	Physical_layer  Physical_layer
	Network_layer   Network_layer
	Transport_layer Transport_layer
	Timestamp   ????type    <<<----------------------
}

packet1 := &Packet{
		Physical_layer: Physical_layer{
			Origin:      "MAC_o",
			Destination: "MAC_d",
			Header:      3,
			Payload:     4},
		Network_layer: Network_layer{
			Origin:      "IP_o",
			Destination: "IP_d",
			Version:     4,
			Header:      1,
			Payload:     2},
		Transport_layer: Transport_layer{
			Origin:      "PORT_o",
			Destination: "PORT_d",
			Header:      23,
			Payload:     25},
		Timestamp: ????expression,    <<<----------------------
	}

更多关于Golang在MongoDB中插入当前日期的方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

8 回复

谢谢Petrus,我会照做的。

更多关于Golang在MongoDB中插入当前日期的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


MongoDB 显示的时间是 UTC 时间吗?

忽略单调时钟校正时,这些时间看起来是等价的。

在Go语言中,通常使用time.Time来表示时间。有什么理由不使用它吗?

感谢,在查阅了您回复中的文档后,使用 time.Now() 方法成功了。它也通过了 MongoDB 的验证。

附:您知道如何为 time.Now() 方法设置正确的时区吗?我得到的输出比我的当前时间快了3小时。

再附:这是我的第一个 Go 语言项目,如果问题太简单请见谅。

当我执行查询时,我也打印了 time.Now() 的值:

Go 语言输出显示:

2021-03-18 12:52:45.848120799 -0300 -03 m=+0.006643606

MongoDB 存储的值显示:

timestamp: 2021-03-18T15:52:45.848+00:00

juantuc98:

当我执行查询时,我也打印了 time.Now() 的值:

Go 输出显示: 2021-03-18 12:52:45.848120799 -0300 -03 m=+0.006643606

MongoDB 存储的值显示: timestamp: 2021-03-18T15:52:45.848+00:00

MongoDB 文档:

Model Time Data

概述

MongoDB 默认以 UTC 时间存储时间,并将任何本地时间表示形式转换为此格式。必须操作或报告某些未经修改的本地时间值的应用程序,可以同时存储时区和 UTC 时间戳,并在其应用程序逻辑中计算原始本地时间。

Go 的 time.Now() 格式化输出是本地时间(阿根廷时间?,比 UTC 晚三小时)。而 MongoDB 的时间是 UTC 时间。

在Go中插入包含当前日期的MongoDB文档,可以使用primitive.DateTime类型。以下是具体实现:

package main

import (
    "context"
    "time"
    "go.mongodb.org/mongo-driver/bson/primitive"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

type Packet struct {
    Physical_layer  Physical_layer
    Network_layer   Network_layer
    Transport_layer Transport_layer
    Timestamp       primitive.DateTime `bson:"timestamp"`
}

type Physical_layer struct {
    Origin      string
    Destination string
    Header      int
    Payload     int
}

type Network_layer struct {
    Origin      string
    Destination string
    Version     int
    Header      int
    Payload     int
}

type Transport_layer struct {
    Origin      string
    Destination string
    Header      int
    Payload     int
}

func main() {
    // 创建包含当前时间的文档
    packet1 := &Packet{
        Physical_layer: Physical_layer{
            Origin:      "MAC_o",
            Destination: "MAC_d",
            Header:      3,
            Payload:     4,
        },
        Network_layer: Network_layer{
            Origin:      "IP_o",
            Destination: "IP_d",
            Version:     4,
            Header:      1,
            Payload:     2,
        },
        Transport_layer: Transport_layer{
            Origin:      "PORT_o",
            Destination: "PORT_d",
            Header:      23,
            Payload:     25,
        },
        Timestamp: primitive.NewDateTimeFromTime(time.Now()),
    }

    // MongoDB插入操作
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()

    client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
    if err != nil {
        panic(err)
    }
    defer client.Disconnect(ctx)

    collection := client.Database("test").Collection("packets")
    _, err = collection.InsertOne(ctx, packet1)
    if err != nil {
        panic(err)
    }
}

如果你需要ISO格式的时间戳,可以使用time.Time类型:

type Packet struct {
    Physical_layer  Physical_layer
    Network_layer   Network_layer
    Transport_layer Transport_layer
    Timestamp       time.Time `bson:"timestamp"`
}

// 在创建文档时
packet1 := &Packet{
    // ... 其他字段
    Timestamp: time.Now(),
}

对于UTC时间的ISO格式:

packet1 := &Packet{
    // ... 其他字段
    Timestamp: time.Now().UTC(),
}

MongoDB驱动会自动将time.Time转换为BSON日期类型,在数据库中会显示为ISODate格式。

回到顶部