ホームページ >バックエンド開発 >Golang >Go の BSON マーシャラーを使用して MongoDB の Created_at フィールドと Updated_at フィールドに自動的に値を入力する方法

Go の BSON マーシャラーを使用して MongoDB の Created_at フィールドと Updated_at フィールドに自動的に値を入力する方法

DDD
DDDオリジナル
2024-11-24 20:35:14921ブラウズ

How to Automatically Populate Created_at and Updated_at Fields in MongoDB using Go's BSON Marshaler?

Go データベース ドライバーを使用した MongoDB の Created_at および Updated_at フィールドの自動作成

Go では、MongoDB データベース ドライバーを使用する場合、created_at構造体の updated_at フィールドには、挿入中にタイムスタンプが自動的に設定されません。この問題を解決するには、カスタム マーシャラーを実装して、構造体を MongoDB に保存する前にこれらのフィールドを更新できます。

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))
}

*User 型の値を保存するときに MarshalBSON() メソッドが呼び出され、 created_at フィールドと updated_at フィールドは、オブジェクトを BSON 表現にマーシャリングする前に現在時刻に設定されます。

このカスタム マーシャラーを使用するには、 User オブジェクトへのポインターをインスタンス化し、MongoDB コレクションに挿入します。

user := &User{Name: "username"}

c := client.Database("db").Collection("collection")
if _, err := c.InsertOne(context.Background(), user); err != nil {
    // handle error
}

MarshalBSON() メソッドを実装すると、Go 構造体を MongoDB に保存するときに、created_at フィールドと updated_at フィールドのタイムスタンプを自動的に生成できます。フィールドに現在時刻が適切に入力されていることを確認します。

以上がGo の BSON マーシャラーを使用して MongoDB の Created_at フィールドと Updated_at フィールドに自動的に値を入力する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。