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

Truy cập MongoDB từ Go

Nếu bạn muốn thay đổi một giá trị hoặc thực hiện chuyển đổi kiểu khi sắp xếp / bỏ quản lý các giá trị của mình từ / sang MongoDB, bạn có thể thực hiện việc đó bằng cách triển khai logic sắp xếp / bỏ quản lý tùy chỉnh.

Bạn có thể thực hiện việc này bằng cách triển khai bson.Getterbson.Setter các giao diện. Bên trong các phương thức này, bạn có thể làm bất cứ điều gì bạn muốn với các giá trị được sắp xếp / không được phân chia.

Dễ nhất là mở rộng clientConfigData của bạn nhập với một trường bổ sung, một trường sẽ thuộc loại time.Time , giá trị bạn cần:

type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"`
}

Nó có giá trị thẻ bson:"-" , bởi vì chúng tôi không muốn điều này xuất hiện trong MongoDB.

Và bây giờ là logic sắp xếp / hủy định vị trí tùy chỉnh:

const endDateLayout = "2006-01-02 15:04:05" // Use your layout here

func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}

Điều gì xảy ra ở đây là SetBSON() chịu trách nhiệm "điền" giá trị cấu trúc của bạn với giá trị thô đến từ MongoDB và GetBSON() có trách nhiệm cung cấp một giá trị mà bạn muốn được lưu lại (được sắp xếp theo nguyên tắc).

Khi tải:SetBSON() trước tiên hãy giải nén giá trị nguyên trạng, sau đó đặt đúng EndDate trường (thuộc loại time.Time ) từ chuỗi string giá trị ngày đến từ DB (EndDateStr ).

Khi lưu:GetBSON() trước tiên hãy điền vào EndDateStr (trường được lưu) từ EndDate và sau đó chỉ cần trả về, báo hiệu rằng có thể lưu.

Một điều cần lưu ý:cả SetBSON()GetBSON() tạo một my mới gõ bên trong chúng. 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 clientConfigData không tốt, vì chúng tôi đã triển khai bson.Getterbson.Setter , vì vậy SetBSON()GetBSON() sẽ được gọi là vô tận. my mới loại không có các phương thức này, vì vậy "đệ quy" vô tận không xảy ra (loại string 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).

Cũng xem câu hỏi liên quan / tương tự:Đặt ngày mặc định khi chèn tài liệu với trường thời gian.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chọn Max () với nhóm theo mongodb

  2. Tổng hợp MongoDB với $ lookup chỉ bao gồm (hoặc dự án) một số trường để trả về từ truy vấn

  3. Tại sao chúng ta cần, lợi ích gì khi sử dụng mongoose

  4. MongoDB $ sqrt

  5. Tại sao các ObjectIds MongooseJS của tôi không thành công trong bài kiểm tra bình đẳng?