为了账号安全,请及时绑定邮箱和手机立即绑定

更新 MongoDB 和 Golang 驱动程序中的时间戳字段

更新 MongoDB 和 Golang 驱动程序中的时间戳字段

Go
慕村225694 2023-08-07 18:49:10
我正在使用 Golang 的官方 MongoDb 驱动程序。我有一个时间戳类型的字段,我想从我的 Golang 代码中更新它。这是我的结构(lastUpdate 字段是时间戳字段):import (    "context"    "log"    "time"    "go.mongodb.org/mongo-driver/bson"    "go.mongodb.org/mongo-driver/mongo"    "go.mongodb.org/mongo-driver/mongo/options"    "go.mongodb.org/mongo-driver/mongo/readpref"    "go.mongodb.org/mongo-driver/bson/primitive")type MyStruct struct {    Id primitive.ObjectID  `json:"id" bson:"_id,omitempty"`    Name   string `json:"name"`    Alias  string `json:"alias"`    Signed bool   `json:"signed"`    Age int   `json:"age"`    CreatedDate time.Time   `json:"createdDaate"`    LastUpdate primitive.Timestamp `json:"lastUpdate"`}然后我传递这个 bson 来更新我的数据:    // logic to update data    docID, _ := primitive.ObjectIDFromHex("5de30185e4fabe4778f0ffdf")    UpdateMyData(c, bson.M{"createdDate": time.Now(), "lastUpdate": time.Now().UnixNano() }, bson.M{"_id": docID}) //update methodfunc UpdateMyData(client *mongo.Client, updatedData bson.M, filter bson.M) int64 {    collection := client.Database("*****").Collection("*****")    atualizacao := bson.D{ {Key: "$set", Value: updatedData} }    updatedResult, err := collection.UpdateOne(context.TODO(), filter, atualizacao)    if err != nil {        log.Fatal("Error on updating one Hero", err)    }    return updatedResult.ModifiedCount}UpdateMyData 方法的内容很好,因为它只接受 bson 并调用 UpdateOne 方法将数据更新到数据库中,并适用于我正确拥有的所有不同字段。问题是time.Now().UnixNane()返回int64值,上面的代码不会引发错误,但它将我的 MongoDb 数据库中该特定行的lastUpdated的“类型”更改为Int64 !那么将数据传递到时间戳字段而不改变其类型的正确方法是什么?
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

尝试传递时间戳而不是 int64:

"lastUpdate": primitive.Timestamp{T:uint32(time.Now().Unix())}

请注意,mongodb 时间戳是 unix 秒,而不是纳秒。


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信