MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Đặt ngày mặc định khi chèn tài liệu với trường thời gian.

Trong Go, bạn không thể xác định các giá trị mặc định cho các trường, chúng sẽ luôn là giá trị 0 của loại chúng khi một giá trị cấu trúc mới được tạo (trừ khi bạn sử dụng một ký tự tổng hợp nơi bạn có thể cung cấp một giá trị khác một cách rõ ràng).

Vì vậy, một tùy chọn sẽ là tạo một hàm giống như hàm tạo NewUser() sẽ đặt trường này và luôn sử dụng chức năng này để tạo người dùng mới:

func NewUser() *User {
    return &User{
        CreatedAt: time.Now(),
    }
}

Tất nhiên điều này không thể bị ép buộc và điều này cũng sẽ giữ dấu thời gian của User cấu trúc tạo giá trị chứ không phải khi nó được lưu.

Một cách tiếp cận khác tốt hơn là sử dụng logic sắp xếp tùy chỉnh.

Bạn có thể viết logic sắp xếp tùy chỉnh bằng cách triển khai bson.Getter . GetBSON() có trách nhiệm cung cấp một giá trị thực sự sẽ được lưu lại. Chúng tôi muốn có cùng một User phiên bản được lưu, chỉ CreatedAt của nó trường đặt trước:

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

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

Lưu ý rằng một my mới loại được tạo và trả về. Lý do cho điều này là để tránh tràn ngăn xếp. Chỉ cần trả về giá trị kiểu *User không tốt, vì nó thực thi bson.Getter , vì vậy GetBSON() sẽ được gọi là vô tận. my mới loại không có phương thức này, vì vậy "đệ quy" vô tận không xảy ra (loại type từ khóa tạo ra một kiểu mới và nó không "kế thừa" các phương thức của kiểu cơ bản).

Lưu ý rằng giải pháp này cũng sẽ ghi đè (thiết lập lại) CreatedAt trường) ngay cả khi bạn chỉ muốn lưu lại User . Vì vậy, chúng ta nên thêm kiểm tra xem CreatedAt trường được điền và chỉ đặt nó nếu đó là giá trị 0:

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

Cũng xem câu hỏi liên quan / tương tự:Sử dụng MongoDB từ Go




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB và Cassandra

  2. Làm cách nào để thêm json vào một mảng lồng nhau của tài liệu mongodb bằng Spring?

  3. MongoDB $ hoặc Nhà điều hành đường ống tổng hợp

  4. Làm cách nào để xóa các mục trùng lặp khỏi một mảng?

  5. Cập nhật bộ sưu tập MongoDB bằng $ toLower