Maison > développement back-end > Golang > Comment définir les valeurs de date par défaut pour les champs Time.Time dans les documents Mgo ?

Comment définir les valeurs de date par défaut pour les champs Time.Time dans les documents Mgo ?

Linda Hamilton
Libérer: 2024-11-23 02:45:29
original
706 Les gens l'ont consulté

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

Insertion de date par défaut pour les documents Mgo avec champ Time.Time

Introduction

Dans MongoDB, il est possible de définir des valeurs par défaut pour les champs de document. Cela peut être utile pour remplir automatiquement des champs avec des valeurs spécifiques lors de la création d'un document, comme un champ d'horodatage.

Problème

Dans Mgo, le pilote Go pour MongoDB, il n'existe aucun moyen direct de définir valeurs par défaut pour les champs comme dans le modèle JavaScript Mongoose. Les développeurs recherchent une solution pour insérer automatiquement une valeur de date ou d'heure dans le champ d'un document lors de sa création.

Solution

Il existe deux approches principales pour définir des valeurs de date par défaut dans Mgo :

  1. Fonction constructeur :

    • Créer une fonction de type constructeur qui définit la valeur de champ souhaitée, telle que CreatedAt.
    • Utilisez toujours cette fonction pour créer de nouvelles instances de document.
    • Cette approche permet de contrôler le moment où la valeur par défaut est définie, mais cela nécessite une intervention manuelle.
  2. Personnalisé Marshaling :

    • Implémentez l'interface bson.Getter dans la structure personnalisée pour fournir une valeur avant qu'elle ne soit réellement enregistrée.
    • Utilisez GetBSON() pour renvoyer une copie du struct avec la valeur de champ souhaitée définie (si elle n'est pas déjà définie).
    • Cette approche est plus automatique, mais elle nécessite un examen attentif pour éviter une pile potentielle débordements ou écrasement involontaire de valeurs existantes.

Exemple d'implémentation

Pour l'approche de marshaling personnalisé, voici un exemple d'implémentation :

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)
    }
}
Copier après la connexion

Dans cet exemple, lorsqu'un nouveau document utilisateur est inséré dans la base de données, le champ CreatedAt sera automatiquement défini sur l'heure actuelle. Ceci est réalisé en remplaçant la méthode GetBSON() pour fournir une valeur de structure modifiée lorsque le pilote de base de données tente de sérialiser l'objet pour l'insertion.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal