ホームページ > バックエンド開発 > Golang > Mgo ドキュメントの Time.Time フィールドのデフォルトの日付値を設定する方法

Mgo ドキュメントの Time.Time フィールドのデフォルトの日付値を設定する方法

Linda Hamilton
リリース: 2024-11-23 02:45:29
オリジナル
705 人が閲覧しました

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

Time.Time フィールドを使用した Mgo ドキュメントのデフォルト日付挿入

はじめに

MongoDB では、ドキュメント フィールドにデフォルト値を設定できます。これは、タイムスタンプ フィールドなど、ドキュメントの作成中にフィールドに特定の値を自動的に入力する場合に便利です。

問題

MongoDB の Go ドライバーである Mgo では、定義する直接的な方法がありません。 Mongoose JavaScript モデルと同様のフィールドのデフォルト値。開発者は、ドキュメントの作成時に日付または時刻の値をドキュメントのフィールドに自動的に挿入するソリューションを探しています。

ソリューション

Mgo でデフォルトの日付値を設定するには、主に 2 つの方法があります。

  1. コンストラクター関数:

    • CreatedAt など、目的のフィールド値を設定するコンストラクターのような関数を作成します。
    • 新しいドキュメント インスタンスを作成するには、常にこの関数を使用します。
    • このアプローチでは、デフォルト値をいつ設定するかを制御できますが、手動で設定する必要があります。
  2. カスタム マーシャリング:

    • カスタム構造体に bson.Getter インターフェイスを実装して、前に値を提供します。実際には保存されます。
    • GetBSON() を使用して、そのコピーを返します。必要なフィールド値が設定された構造体を作成します (まだ設定されていない場合)。
    • このアプローチはより自動ですが、潜在的なスタック オーバーフローや既存の値の意図しない上書きを避けるために慎重な考慮が必要です。

実装例

カスタム マーシャリング アプローチの例を次に示します。実装:

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)
    }
}
ログイン後にコピー

この例では、新しいユーザー ドキュメントがデータベースに挿入されると、CreatedAt フィールドが現在時刻に自動的に設定されます。これは、データベース ドライバーがオブジェクトを挿入するためにシリアル化しようとするときに、GetBSON() メソッドをオーバーライドして、変更された構造体の値を提供することによって実現されます。

以上がMgo ドキュメントの Time.Time フィールドのデフォルトの日付値を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート