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 サイトの他の関連記事を参照してください。