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

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

Linda Hamilton
풀어 주다: 2024-11-23 02:45:29
원래의
746명이 탐색했습니다.

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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿