Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengautomasikan Created_at dan Updated_at Timestamp dalam MongoDB menggunakan Golang?

Bagaimana untuk mengautomasikan Created_at dan Updated_at Timestamp dalam MongoDB menggunakan Golang?

Linda Hamilton
Linda Hamiltonasal
2024-12-06 13:17:111014semak imbas

How to Automate Created_at and Updated_at Timestamps in MongoDB using Golang?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn