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

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

Linda Hamilton
Linda Hamilton원래의
2024-12-06 13:17:111015검색

How to Automate Created_at and Updated_at Timestamps in MongoDB using Golang?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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