MongoDB 不保存时间戳

我需要在数据库中保存时间戳createdAtupdatedAt属性,但它们不会自动保存,它们被保存为{T: 0, I: 0}. 我正在使用Mongo Driver执行 CRUD 操作。

因此,在将当前时间附加到用户模型时,这导致了另一个问题;我在某处读到两者createdAtupdatedAt必须是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 models


import (

    "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

}

那么,可以像这样管理时间戳还是我弄错了?


阿晨1998
浏览 184回答 1
1回答

慕桂英546537

您可以简单地使用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.CreatedAtresult, err := db.Collection(collection).InsertOne(context.TODO(), user)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go