Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menetapkan Nilai Tarikh Lalai untuk Medan Masa. Masa dalam Dokumen Mgo?

Bagaimana untuk Menetapkan Nilai Tarikh Lalai untuk Medan Masa. Masa dalam Dokumen Mgo?

Linda Hamilton
Linda Hamiltonasal
2024-11-23 02:45:29748semak imbas

How to Set Default Date Values for Time.Time Fields in Mgo Documents?

Pemasukan Tarikh Lalai untuk Dokumen Mgo dengan Medan Masa.Masa

Pengenalan

Dalam MongoDB, adalah mungkin untuk menetapkan nilai lalai untuk medan dokumen. Ini boleh berguna untuk mengisi medan secara automatik dengan nilai tertentu semasa pembuatan dokumen, seperti medan cap masa.

Isu

Dalam Mgo, pemacu Go untuk MongoDB, tiada cara langsung untuk menentukan nilai lalai untuk medan seperti dalam model JavaScript Mongoose. Pembangun sedang mencari penyelesaian untuk memasukkan nilai tarikh atau masa secara automatik ke dalam medan dokumen apabila dibuat.

Penyelesaian

Terdapat dua pendekatan utama untuk menetapkan nilai tarikh lalai dalam Mgo:

  1. Pembina Fungsi:

    • Buat fungsi seperti pembina yang menetapkan nilai medan yang diingini, seperti CreatedAt.
    • Sentiasa gunakan fungsi ini untuk mencipta tika dokumen baharu.
    • Pendekatan ini menyediakan kawalan ke atas apabila nilai lalai ditetapkan, tetapi ia memerlukan manual campur tangan.
  2. Custom Marshaling:

    • Laksanakan antara muka bson.Getter dalam struct tersuai untuk memberikan nilai sebelum ia sebenarnya disimpan.
    • Gunakan GetBSON() untuk mengembalikan salinan struct dengan medan yang dikehendaki nilai yang ditetapkan (jika ia belum ditetapkan).
    • Pendekatan ini lebih automatik, tetapi ia memerlukan pertimbangan yang teliti untuk mengelakkan kemungkinan limpahan tindanan atau tiruan nilai sedia ada yang tidak diingini.

Contoh Pelaksanaan

Untuk pendekatan adat marshaling, berikut ialah contoh pelaksanaan:

import (
    "context"
    "time"

    "github.com/globalsign/mgo/bson"
)

type User struct {
    CreatedAt time.Time `json:"created_at" bson:"created_at"`
}

func (u *User) GetBSON() (interface{}, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    type my *User
    return my(u), nil
}

func main() {
    session, err := mgo.Dial("localhost:27017")
    if err != nil {
        panic(err)
    }
    defer session.Close()

    c := session.DB("mydb").C("users")

    // Create a new user with a default CreatedAt timestamp
    user := User{}
    err = c.Insert(user)
    if err != nil {
        panic(err)
    }
}

Dalam contoh ini, apabila dokumen Pengguna baharu dimasukkan ke dalam pangkalan data, medan CreatedAt akan ditetapkan secara automatik kepada masa semasa. Ini dicapai dengan mengatasi kaedah GetBSON() untuk menyediakan nilai struct yang diubah suai apabila pemacu pangkalan data cuba untuk menyerikan objek untuk dimasukkan.

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Nilai Tarikh Lalai untuk Medan Masa. Masa dalam Dokumen Mgo?. 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