Go 用 MongoDB ドライバーを使用して構造体を MongoDB コレクションに挿入すると、created_at フィールドと updated_at フィールドは次のようになります。ゼロ時間に設定 (0001-01-01T00:00:00.000) 00:00)。これは、特にこれらのフィールドに作成と変更の実際の時刻を保存することが想定されている場合には、望ましい動作ではない可能性があります。
MongoDB サーバーは、created_at とupdated_at フィールド。ただし、カスタム マーシャラーを作成することでこの機能を実装できます。
ユーザー タイプに bson.Marshaler インターフェイスを実装します。これにより、構造体をデータベースに挿入する前に BSON にマーシャリングする方法をカスタマイズできます。
カスタム マーシャラーの MarshalBSON メソッドは、次の手順を実行する必要があります。
カスタム マーシャラーの例を次に示します。
func (user *User) MarshalBSON() ([]byte, error) { if user.CreatedAt.IsZero() { user.CreatedAt = time.Now() } user.UpdatedAt = time.Now() type my User return bson.Marshal((*my)(user)) }
カスタム マーシャラーを使用するには、User 構造体を挿入する場所に必ずカスタム マーシャラーを使用してください。 InsertOne メソッドを使用してデータベースを作成します。 User 構造体へのポインタを引数として渡す必要があります。
例:
user := &User{Name: "username"} c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), user); err != nil { // handle error }
カスタム マーシャラーをより大きな構造体に埋め込んだ場合、カスタム マーシャラーは機能しないことに注意してください。この問題を回避するには、代わりに埋め込み構造体全体にカスタム マーシャラーを使用します。
以上がMongoDB を挿入する前に Go 構造体の `created_at` フィールドと `updated_at` フィールドに自動的に値を入力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。