replied on the mgo list 

https://groups.google.com/d/topic/mgo-users/F3LbWdyPGDc/discussion

(pasted here to save a click)

Hi,

> the checkbox is unchecked and form is submitted to save. Now as I have 
applied "omitempty" 

if the checkbox is unchecked, your client side code should send "false" to 
the go server, so omitempty is not applied because it is not empty, it is 
false, so saving it to mongo will actually update the field.

for truly optional fields, what I do is, declare the fields as pointers to 
the type, so, you would have

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"`// I assume this 
is also optional
    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"`
}


the bson/json Un/marshaller will then omit the values that are nil 
pointers, so now yo ucan tell the difference between a false checkbox, and 
a REST POST that did not include the field at all

Hope this helps.

Diego

On Wednesday, November 8, 2017 at 12:46:39 AM UTC-5, Amandeep Kaur wrote:
>
>
> Hi
>
> I am working on a Coupon form in which I have some optional fields. 
>
> *Introduction:*
>
> All the form field values are received as JSON and mapped into a Golang 
> structure. In the structure, I have added an "omitempty" flag with every 
> field. So only those form values are mapped which have some appropriate 
> value, rest of the values like 0, " ", false are ignored by the structure.
>
> Here is the Golang structure
>
> 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"`}
>
> *Problem:*
>
>    1. 
>    
>    When I save this form for the very first time, the form values that 
>    are appropriate are saved into the Mongodb.
>    2. 
>    
>    Now I want to update that form and suppose there is a check box, which 
>    was checked at the time of saving data. While updating form, the checkbox 
>    is unchecked and form is submitted to save. Now as I have applied 
>    "omitempty" flag in the structure, so its not mapping the empty value to 
>    the checkbox field. Since the value is not mapped into the structure, its 
>    not getting saved into the Database. 
>    3. 
>    
>    When a user edits the form for the second time, it sees the same check 
>    box as checked. (But practically, the value should be updated to the DB 
> and 
>    the check box should be displayed as unchecked.)
>    4. 
>    
>    I am using the same form data (in JSON format) in a REST API. In API, 
>    while updating form data, if I mention only those values which are 
> required 
>    and don't pass the values which I don't want to update, then MongoDB is 
>    overriding the whole document with the provided required values(Even those 
>    values are also being overridden which I don't want to update as well as 
>    don't pass in the API).
>    
> *Requirement:*
>
> In future, I want to expose the REST API, So I don't want this thing to be 
> happened there. That is why I don't want to remove "omitempty" flag from 
> the structure fields. 
>
> Is there any way to save the empty form values or API data fields to the 
> DB while using omitempty flag in the structure?
>
> Thanks!
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to