>백엔드 개발 >Golang >Go의 BSON Marshaler를 사용하여 MongoDB에서 Created_at 및 Update_at 타임스탬프를 자동화하는 방법은 무엇입니까?

Go의 BSON Marshaler를 사용하여 MongoDB에서 Created_at 및 Update_at 타임스탬프를 자동화하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-05 09:22:10237검색

How to Automate Created_at and Updated_at Timestamps in MongoDB using Go's BSON Marshaler?

MongoDB에서 Created_at 및 업데이트된_at 필드 채우기 자동화

제공된 Go 코드 조각에서 User 구조체는 _id, Created_at,update_at에 대한 필드를 정의합니다. , 그리고 이름. InsertOne()을 사용하여 새 User 개체를 데이터베이스에 삽입하면 Created_at 및 update_at 필드가 자동으로 타임스탬프로 채워지지 않습니다.

질문: MongoDB만 사용하여 MongoDB와 함께 제공된 Go 코드 드라이버?

해결책: MongoDB 서버는 이러한 필드에 대한 타임스탬프 자동 채우기를 자동으로 처리하지 않습니다. 그러나 User 구조체에 대한 사용자 정의 Marshaler를 구현하여 이 기능을 수동으로 구현할 수 있습니다.

사용자 정의 Marshaler를 생성하려면 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 값에 대한 포인터를 사용해야 합니다. 삽입:

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

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

my 유형의 목적은 마샬링 프로세스 중에 스택 오버플로를 방지하는 것입니다.

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

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