>백엔드 개발 >Golang >Go의 BSON Marshaler를 사용하여 MongoDB에서 Created_at 및 Update_at 필드를 자동으로 채우는 방법은 무엇입니까?

Go의 BSON Marshaler를 사용하여 MongoDB에서 Created_at 및 Update_at 필드를 자동으로 채우는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-24 20:35:14923검색

How to Automatically Populate Created_at and Updated_at Fields in MongoDB using Go's BSON Marshaler?

Go 데이터베이스 드라이버를 사용하여 MongoDB에서 Created_at 및 업데이트된_at 필드 자동 생성

Go에서 MongoDB 데이터베이스 드라이버를 사용할 때 Created_at 구조체의 update_at 필드는 삽입 중에 자동으로 타임스탬프로 채워지지 않습니다. 이 문제를 해결하려면 MongoDB에 구조체를 저장하기 전에 이러한 필드를 업데이트하도록 사용자 지정 마샬러를 구현할 수 있습니다.

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 유형의 값을 저장할 때 호출되며 Created_at 및 update_at 필드는 객체를 BSON 표현으로 마샬링하기 전에 현재 시간으로 설정됩니다.

이 사용자 정의 마샬러를 사용하려면 인스턴스화하세요. User 개체에 대한 포인터를 지정하고 이를 MongoDB 컬렉션에 삽입합니다.

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

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

MarshalBSON() 메서드를 구현하면 Go 구조체를 MongoDB에 저장할 때 Created_at 및 update_at 필드에 대한 타임스탬프를 자동으로 생성할 수 있습니다. 필드가 현재 시간으로 올바르게 채워졌는지 확인하세요.

위 내용은 Go의 BSON Marshaler를 사용하여 MongoDB에서 Created_at 및 Update_at 필드를 자동으로 채우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.