Thanks @Diego Medina  It worked for me.

On Thursday, November 9, 2017 at 12:19:14 AM UTC+5:30, Diego Medina wrote:
>
> 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