sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan opdateres Mongodb-felter med udeladt flag i Golang-struktur

En værdi på bool type har 2 mulige værdier:false og true . Og du vil "kommunikere" 3 forskellige tilstande med en bool felt, nemlig ikke at opdatere feltet, at sætte feltet til false og for at indstille feltet til true . Dette er åbenbart ikke muligt.

Det samme gælder for int værdier:en værdi på 0 kan ikke repræsentere 2 forskellige valg, nemlig ikke at opdatere feltet og sætte det til 0 .

Hvis du vil beholde omitempty muligheder i tag-værdierne, så skal du ændre felterne til pointers for at få det til at fungere:

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"`
}

Måden det fungerer på er, at hvis markøren er nil , vil det blive udeladt (dette er "undladelse" mulighed). Hvis feltet ikke er nil markør, vil den blive opdateret til den spidse værdi.

Så for eksempel hvis du vil udelukke en bool feltet og derefter *bool værdi skal/vil være nil . Hvis du vil indstille/opdatere den til false , skal det være en pointer til en false værdi. Hvis du vil indstille/opdatere den til true , skal det være en pegepind til en true værdi.

Generelt enhver type, hvis nul værdi er muligt og bør tælles med, kan du kun håndtere "det er nulværdien" og "det mangler i inputtet", hvis du gør det til en pointer, og nil værdien af ​​markøren vil angive tilfældet "mangler fra input", mens en ikke-nil markøren til nulværdien vil angive tilfældet "det er nulværdien". Så i ovenstående eksempel hvis string felter kunne også tage den tomme strengværdi ("" ), så skal du også lave dem til pointere.

Bemærk, at du også kan opnå dette ved at bruge tilpasset rangering og unmarshaling-logik, men det er mere besværligt, og brug af pointere giver dig dette automatisk.



  1. MongoDB:krydssamlingsforespørgsler

  2. Skinner g fejler for mongoide kommandoer

  3. Hvordan finder man alt i mongoosejs?

  4. Hvordan dekorerer man et klasseemne til at være et indeks og får det samme som at bruge sureIndex?