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
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.006643606MongoDB 存储的值显示:
timestamp: 2021-03-18T15:52:45.848+00:00
MongoDB 文档:
概述
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格式。

