在Golang 結構中使用Omitempty 標誌更新MongoDB 字段
Golang 結構中的omitempty 標誌允許開發人員從JSON 編組中排除字段(JSON如果他們有)零值。然而,這種行為在更新 MongoDB 文件時可能會帶來挑戰。
考慮一個優惠券表單,其中某些欄位是可選的。表示表單的 Golang 結構可能在這些欄位上有 omitempty 標誌,例如:
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"` }
問題
更新表單時會出現問題。如果在表單提交期間取消選取先前選取的核取方塊(布林欄位),則 omitempty 標誌會將其從結構中排除。因此,該值不會在 MongoDB 文件中更新。
同樣,如果在 REST API 請求中僅提供必填字段,MongoDB 會覆寫整個文檔,包括不應更新的值。
解
要解決這個問題,需要更改註解的欄位省略指標。這允許欄位具有 nil 值,表示「未更新」狀態:
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"` }
透過此修改,nil 指標指示不應更新該欄位。如果提供了非零指針,則其值將在 MongoDB 文件中設定。這有效地解決了更新 bool 和 int 欄位的問題,同時保留 omitempty 標誌。
以上是如何使用 Golang 的 omitempty 標誌處理 MongoDB 更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!