Golang を使用した MongoDB の Created_at フィールドと Updated_at フィールドの自動化
提供されたコード スニペットでは、User 構造体に created_at フィールドと updated_at フィールドの自動化がありません。 。これらのフィールドは、一時的なイベントを追跡するために重要です。
解決策
MongoDB サーバーは、自動フィールド入力をサポートしていません。これを実現するには、User 構造体にカスタム マーシャリング関数を実装します。 bson.Marshaler インターフェイスを実装することで、構造体を BSON にシリアル化する方法を制御できます。
実装
MarshalBSON 関数を実装する方法は次のとおりです。
import ( "context" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" ) 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)) }
MarshalBSON 関数にはポインター レシーバーがあり、マーシャリング時に User 値へのポインタを使用する必要があります。
使用法
カスタム マーシャリング関数を実装した後、次のように使用できます。
client := mongo.NewClient(...) // (redacted for brevity) c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), &user); err != nil { // handle error }
説明
元帥BSON関数は、created_at フィールドが空かどうかを確認し、空の場合は現在の時刻に設定します。次に、updated_at フィールドを現在時刻に設定します。型エイリアス (my) を使用し、User 構造体を *my にキャストすることで、マーシャリング プロセス中の潜在的なスタック オーバーフローを回避できます。
以上がGolang を使用して MongoDB の Created_at および Updated_at タイムスタンプを自動化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。