Golang을 사용하여 MongoDB에서 Created_at 및 업데이트된_at 필드 자동화
제공된 코드 조각에서 사용자 구조체에는 Created_at 및 업데이트된_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 함수에는 포인터 수신기가 있다는 점에 유의해야 합니다. 마샬링할 때 사용자 값에 대한 포인터를 사용해야 합니다.
사용법
사용자 정의 마샬링 기능을 구현한 후 다음과 같이 사용할 수 있습니다.
client := mongo.NewClient(...) // (redacted for brevity) c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), &user); err != nil { // handle error }
설명
MarshalBSON 함수는 Created_at 필드가 비어 있는지 확인하고 비어 있으면 현재 시간으로 설정합니다. 그런 다음 update_at 필드를 현재 시간으로 설정합니다. 유형 별칭(my)을 사용하고 User 구조체를 *my로 캐스팅하면 마샬링 프로세스 중에 잠재적인 스택 오버플로를 방지할 수 있습니다.
위 내용은 Golang을 사용하여 MongoDB에서 Created_at 및 Update_at 타임스탬프를 자동화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!