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

Cách cập nhật các trường Mongodb với cờ omitempty trong cấu trúc Golang

Giá trị của bool loại có 2 giá trị có thể có:falsetrue . Và bạn muốn "giao tiếp" 3 trạng thái khác nhau bằng bool , cụ thể là để không cập nhật trường, để đặt trường thành false và đặt trường thành true . Điều này rõ ràng là không thể.

Điều tương tự cũng xảy ra với int giá trị:giá trị 0 không thể đại diện cho 2 lựa chọn khác nhau, đó là không cập nhật trường và đặt nó thành 0 .

Nếu bạn muốn giữ omitempty các tùy chọn trong giá trị thẻ, sau đó để làm cho nó hoạt động, bạn phải thay đổi các trường thành con trỏ:

type Coupon struct {
    Id               *int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Code             string `json:"code,omitempty" bson:"code,omitempty"`
    Description      string `json:"description,omitempty" bson:"description,omitempty"`
    Status           *bool   `json:"status" bson:"status"`
    MaxUsageLimit    *int    `json:"max_usage_limit,omitempty" bson:"max_usage_limit,omitempty"`
    SingleUsePerUser *bool   `json:"single_use_per_user,omitempty" bson:"single_use_per_user,omitempty"`
}

Cách nó hoạt động là nếu con trỏ là nil , nó sẽ bị bỏ trống (đây là "omitempty" quyền mua). Nếu trường không phải là nil con trỏ, nó sẽ được cập nhật thành giá trị trỏ.

Vì vậy, ví dụ:nếu bạn muốn loại trừ một bool rồi đến trường *bool giá trị nên / sẽ là nil . Nếu bạn muốn đặt / cập nhật nó thành false , nó phải là một con trỏ đến false giá trị. Nếu bạn muốn đặt / cập nhật nó thành true , nó phải là một con trỏ đến true giá trị.

Nói chung, bất kỳ loại nào có giá trị bằng không là có thể và nên được tính bằng, bạn chỉ có thể xử lý "nó đang là giá trị 0" và "nó bị thiếu trong đầu vào" nếu bạn đặt nó là một con trỏ và nil giá trị của con trỏ sẽ biểu thị trường hợp "bị thiếu từ đầu vào", trong khi không phải nil con trỏ đến giá trị 0 sẽ biểu thị trường hợp "nó đang là giá trị 0". Vì vậy, trong ví dụ trên nếu chuỗi string các trường cũng có thể nhận giá trị chuỗi trống ("" ), thì bạn cũng phải làm cho chúng trở thành con trỏ.

Lưu ý rằng bạn cũng có thể đạt được điều này bằng cách sử dụng logic sắp xếp và bỏ quản lý tùy chỉnh, nhưng điều đó phức tạp hơn và việc sử dụng con trỏ sẽ tự động cung cấp cho bạn điều này.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo tổng hợp mảng lồng nhau

  2. Đừng GET req.query.name thành collection.find trong express và MongoDB

  3. Cập nhật tài liệu bằng cách sử dụng kết quả của các trường được nối

  4. Truy vấn đối sánh tổng hợp Mongodb với mức độ ưu tiên đối sánh đầy đủ

  5. Mongoose findOneAndUpdate và runValidators không hoạt động