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

MongoDB 不保存时间戳

MongoDB 不保存时间戳

Go
阿晨1998 2022-10-17 15:59:16
我需要在数据库中保存时间戳createdAt和updatedAt属性,但它们不会自动保存,它们被保存为{T: 0, I: 0}. 我正在使用Mongo Driver执行 CRUD 操作。因此,在将当前时间附加到用户模型时,这导致了另一个问题;我在某处读到两者createdAt都updatedAt必须是primitive.Timestamp,但我不知道如何真正保存它们。我尝试User.CreatedAt =过:time.Now()new primitive.Timestamp(time.Now(), 1))primitive.Timestamp{ T: uint32(time.Now().Unix()), I: 0 }(这似乎工作)回到主要问题,最好的解决方案应该是数据库允许我配置时间戳,以便在insertOne()触发 a 时自动保存。primitive.Timestamp分配给User.CreatedAt正确的总是可行的。所以,这是我的模型:package modelsimport (    "go.mongodb.org/mongo-driver/bson/primitive")type User struct {    Id           primitive.ObjectID  `bson:"_id,omitempty" json:"id,omitempty"`    Email        string              `bson:"email" json:"email"`    CreatedAt    primitive.Timestamp `bson:"createdAt" json:"createdAt"`    UpdatedAt    primitive.Timestamp `bson:"updatedAt" json:"updatedAt"`}这是我的服务:func CreateUser(user models.User) (models.User, error) {    db := database.GetDatabase()    result, err := db.Collection(collection).InsertOne(context.TODO(), user)    if err != nil {        return models.User{}, err    }    user.Id = result.InsertedID.(primitive.ObjectID)    user.CreatedAt = primitive.Timestamp{ T: uint32(time.Now().Unix()), I: 0 }    return user, nil}那么,可以像这样管理时间戳还是我弄错了?
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您可以简单地使用time.Time:


type User struct {

    Id           primitive.ObjectID  `bson:"_id,omitempty" json:"id,omitempty"`

    Email        string              `bson:"email" json:"email"`

    CreatedAt    time.Time `bson:"createdAt" json:"createdAt"`

    UpdatedAt    time.Time `bson:"updatedAt" json:"updatedAt"`

}

MongoDB 不会为您更新这些内容。在将它们存储到数据库之前,您必须自己设置它们:


user.CreatedAt=time.Now()

user.UpdatedAd=user.CreatedAt

result, err := db.Collection(collection).InsertOne(context.TODO(), user)


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号