Apabila memasukkan struct ke dalam koleksi MongoDB menggunakan pemacu MongoDB untuk Go, medan created_at dan updated_at adalah ditetapkan kepada masa sifar (0001-01-01T00:00:00.000 00:00). Ini mungkin bukan tingkah laku yang diingini, terutamanya jika medan ini dijangka menyimpan masa sebenar penciptaan dan pengubahsuaian.
Pelayan MongoDB tidak menyokong pengisian automatik create_at dan kemas kini_di medan. Walau bagaimanapun, anda boleh melaksanakan fungsi ini dengan mencipta marshaler tersuai.
Melaksanakan antara muka bson.Marshaler untuk jenis Pengguna anda. Ini akan membolehkan anda menyesuaikan cara struct dimarshallkan ke dalam BSON sebelum dimasukkan ke dalam pangkalan data.
Kaedah MarshalBSON marshaler tersuai anda harus melakukan langkah berikut:
Berikut ialah contoh marshaler tersuai:
func (user *User) MarshalBSON() ([]byte, error) { if user.CreatedAt.IsZero() { user.CreatedAt = time.Now() } user.UpdatedAt = time.Now() type my User return bson.Marshal((*my)(user)) }
Untuk menggunakan marshaler tersuai, ingat untuk menggunakannya di mana sahaja anda memasukkan struct Pengguna ke dalam pangkalan data menggunakan Kaedah InsertOne. Anda mesti menghantar penunjuk kepada struct Pengguna sebagai hujah.
Contoh:
user := &User{Name: "username"} c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), user); err != nil { // handle error }
Perhatikan bahawa marshaler tersuai tidak akan berfungsi jika anda membenamkannya ke dalam struct yang lebih besar. Untuk mengelakkan isu ini, anda boleh menggunakan marshaler tersuai untuk keseluruhan struct terbenam sebaliknya.
Atas ialah kandungan terperinci Bagaimana untuk Mengisi Medan `created_at` dan `updated_at` secara automatik dalam Go Structs Sebelum Sisipan MongoDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!