>백엔드 개발 >Golang >Mgo 문서의 Time.Time 필드에 대한 기본 날짜 값을 설정하는 방법은 무엇입니까?

Mgo 문서의 Time.Time 필드에 대한 기본 날짜 값을 설정하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-23 02:45:29747검색

How to Set Default Date Values for Time.Time Fields in Mgo Documents?

Time.Time 필드가 있는 Mgo 문서에 대한 기본 날짜 삽입

소개

MongoDB에서는 문서 필드에 대한 기본값을 설정할 수 있습니다. 이는 문서 생성 중에 타임스탬프 필드와 같은 특정 값으로 필드를 자동으로 채우는 데 유용할 수 있습니다.

문제

MongoDB용 Go 드라이버인 Mgo에서는 정의할 직접적인 방법이 없습니다. Mongoose JavaScript 모델에서와 같이 필드의 기본값입니다. 개발자는 문서 생성 시 문서 필드에 날짜 또는 시간 값을 자동으로 삽입하는 솔루션을 찾고 있습니다.

솔루션

Mgo에서 기본 날짜 값을 설정하는 데는 두 가지 주요 접근 방식이 있습니다.

  1. 건축자 함수:

    • CreatedAt와 같이 원하는 필드 값을 설정하는 생성자와 유사한 함수를 만듭니다.
    • 항상 이 함수를 사용하여 새 문서 인스턴스를 만듭니다.
    • 이 접근 방식을 사용하면 기본값이 설정되는 시점을 제어할 수 있지만 수동으로 수행해야 합니다. 개입.
  2. 사용자 정의 마샬링:

    • 사용자 정의 구조체에 bson.Getter 인터페이스를 구현하여 이전에 값을 제공합니다. 실제로 저장됩니다.
    • GetBSON()을 사용하여 구조체의 복사본을 반환합니다. 원하는 필드 값이 설정되어 있습니다(아직 설정되지 않은 경우).
    • 이 접근 방식은 더욱 자동이지만 잠재적인 스택 오버플로 또는 의도하지 않은 기존 값 덮어쓰기를 방지하려면 신중한 고려가 필요합니다.

구현 예

사용자 정의 마샬링 접근 방식의 예는 다음과 같습니다. 구현:

import (
    "context"
    "time"

    "github.com/globalsign/mgo/bson"
)

type User struct {
    CreatedAt time.Time `json:"created_at" bson:"created_at"`
}

func (u *User) GetBSON() (interface{}, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    type my *User
    return my(u), nil
}

func main() {
    session, err := mgo.Dial("localhost:27017")
    if err != nil {
        panic(err)
    }
    defer session.Close()

    c := session.DB("mydb").C("users")

    // Create a new user with a default CreatedAt timestamp
    user := User{}
    err = c.Insert(user)
    if err != nil {
        panic(err)
    }
}

이 예에서 새 사용자 문서가 데이터베이스에 삽입되면 CreatedAt 필드가 자동으로 현재 시간으로 설정됩니다. 이는 데이터베이스 드라이버가 삽입을 위해 개체를 직렬화하려고 시도할 때 수정된 구조체 값을 제공하도록 GetBSON() 메서드를 재정의함으로써 달성됩니다.

위 내용은 Mgo 문서의 Time.Time 필드에 대한 기본 날짜 값을 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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