ホームページ >バックエンド開発 >Golang >Go の BSON マーシャラーを使用して MongoDB の Created_at および Updated_at タイムスタンプを自動化する方法

Go の BSON マーシャラーを使用して MongoDB の Created_at および Updated_at タイムスタンプを自動化する方法

DDD
DDDオリジナル
2024-12-05 09:22:10234ブラウズ

How to Automate Created_at and Updated_at Timestamps in MongoDB using Go's BSON Marshaler?

MongoDB での Created_at および Updated_at フィールドの作成の自動化

提供された Go コード スニペットでは、User 構造体が _id、created_at、updated_at のフィールドを定義しています。 、そして名前。 InsertOne() を使用して新しい User オブジェクトがデータベースに挿入されるとき、created_at フィールドと updated_at フィールドにはタイムスタンプが自動的に入力されません。

質問: 自動化された created_at と updated_at をどのように使用できますか? MongoDB のみを使用した MongoDB を使用した提供された Go コードdriver?

解決策: MongoDB サーバーは、これらのフィールドのタイムスタンプの自動入力を自動的に処理しません。ただし、User 構造体のカスタム マーシャラーを実装することで、この機能を手動で実装できます。

カスタム マーシャラーを作成するには、bson.Marshaler インターフェイスを実装します。 MarshalBSON() メソッドは、*User 型の値がデータベースに挿入するためにマーシャリングされるときに呼び出されます。

これを実装する方法の例を次に示します。

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

次の点に注意してください。 MarshalBSON() メソッドにはポインター レシーバーがあるため、次の場合は User 値へのポインターを使用する必要があります。 inserting:

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

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

my 型の目的は、マーシャリング プロセス中のスタック オーバーフローを回避することです。

以上がGo の BSON マーシャラーを使用して MongoDB の Created_at および Updated_at タイムスタンプを自動化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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