sql >> Database >  >> NoSQL >> MongoDB

Hoe Mongodb-velden bij te werken met weglatingsvlag in Golang-structuur

Een waarde van bool type heeft 2 mogelijke waarden:false en true . En je wilt 3 verschillende toestanden "communiceren" met een bool veld, namelijk om het veld niet bij te werken, om het veld in te stellen op false en om het veld in te stellen op true . Dit is natuurlijk niet mogelijk.

Hetzelfde geldt voor int waarden:een waarde van 0 kan niet 2 verschillende keuzes vertegenwoordigen, namelijk het veld niet bijwerken en op 0 zetten .

Als u de omitempty . wilt behouden opties in de tag-waarden, en om het te laten werken, moet u de velden wijzigen in pointers:

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

De manier waarop het werkt is dat als de aanwijzer nil . is , zal het worden weggelaten (dit is de "omitempty" keuze). Als het veld een niet-nil . is aanwijzer, wordt deze bijgewerkt naar de puntwaarde.

Dus als u bijvoorbeeld een bool . wilt uitsluiten veld, dan de *bool waarde zou / zal nil moeten zijn . Als u het wilt instellen / bijwerken naar false , het moet een verwijzing zijn naar een false waarde. Als u het wilt instellen / bijwerken naar true , het moet een verwijzing zijn naar een true waarde.

In het algemeen elk type waarvan de waarde nul is mogelijk en moet worden meegeteld, je kunt alleen omgaan met de "het is de nulwaarde" en "het ontbreekt in de invoer" als je er een aanwijzer van maakt, en de nil waarde van de aanwijzer geeft het geval "ontbrekend in de invoer" aan, terwijl een niet-nil aanwijzer naar de nulwaarde geeft het geval aan "het is de nulwaarde". Dus in het bovenstaande voorbeeld als de string velden kunnen ook de lege tekenreekswaarde aannemen ("" ), dan moet je ze ook pointers maken.

Merk op dat je dit ook kunt bereiken met behulp van aangepaste marshaling- en unmarshaling-logica, maar dat is omslachtiger, en het gebruik van aanwijzers geeft je dit automatisch.



  1. vreemde mongodb en mangoest-fout:niet meester en slaafOk =valse fout

  2. out-of-process cache implementeren met Redis in Windows Azure

  3. mongodb:vraag naar de tijdsperiode tussen twee datumvelden

  4. Kaart-Reduce-prestaties in MongoDb 2.2, 2.4 en 2.6