Mengautomasikan Medan Created_at dan Updated_at dalam MongoDB dengan Golang
Dalam coretan kod yang disediakan, struct Pengguna tidak mempunyai automasi untuk medan created_at dan updated_at . Medan ini penting untuk menjejak peristiwa temporal.
Penyelesaian
Pelayan MongoDB kekurangan sokongan untuk populasi medan automatik. Untuk mencapai matlamat ini, anda boleh melaksanakan fungsi marshaling tersuai untuk struct Pengguna. Dengan melaksanakan antara muka bson.Marshaler, anda boleh mengawal cara struct disirikan ke dalam BSON.
Pelaksanaan
Berikut ialah cara anda boleh melaksanakan fungsi MarshalBSON:
import ( "context" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" ) type User struct { ID primitive.ObjectID `bson:"_id,omitempty"` CreatedAt time.Time `bson:"created_at"` UpdatedAt time.Time `bson:"updated_at"` Name string `bson:"name"` } func (u *User) MarshalBSON() ([]byte, error) { if u.CreatedAt.IsZero() { u.CreatedAt = time.Now() } u.UpdatedAt = time.Now() type my User return bson.Marshal((*my)(u)) }
Anda mesti ambil perhatian bahawa fungsi MarshalBSON mempunyai penerima penunjuk, dan anda mesti menggunakan penunjuk kepada nilai Pengguna anda semasa marshaling.
Penggunaan
Selepas melaksanakan fungsi marshaling tersuai, anda boleh menggunakannya seperti ini:
client := mongo.NewClient(...) // (redacted for brevity) c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), &user); err != nil { // handle error }
Penjelasan
Fungsi MarshalBSON menyemak sama ada medan created_at kosong dan menetapkannya kepada masa semasa jika ya. Ia kemudian menetapkan medan updated_at kepada masa semasa. Dengan menggunakan jenis alias (my) dan menghantar struct Pengguna ke *my, anda mengelakkan kemungkinan limpahan tindanan semasa proses marshalling.
Atas ialah kandungan terperinci Bagaimana untuk mengautomasikan Created_at dan Updated_at Timestamp dalam MongoDB menggunakan Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!