sql >> Databáze >  >> NoSQL >> MongoDB

Jak aktualizovat pole Mongodb pomocí příznaku vynechání ve struktuře Golang

Hodnota bool typ má 2 možné hodnoty:false a true . A chcete "komunikovat" 3 různé stavy pomocí bool pole, jmenovitě neaktualizovat pole, nastavit pole na false a nastavte pole na true . To zjevně není možné.

Totéž platí pro int hodnoty:hodnota 0 nemůže představovat 2 různé možnosti, jmenovitě pole neaktualizovat a nastavit ho na 0 .

Pokud chcete zachovat omitempty možnosti v hodnotách značek, pak aby to fungovalo, musíte změnit pole na ukazatele:

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

Funguje to tak, že pokud je ukazatel nil , bude vynechán (toto je "omitempty" volba). Pokud je pole jiné než nil ukazatel, bude aktualizován na ukazovanou hodnotu.

Pokud tedy například chcete vyloučit bool a poté *bool hodnota by měla / bude nil . Pokud jej chcete nastavit / aktualizovat na false , musí to být ukazatel na false hodnota. Pokud jej chcete nastavit / aktualizovat na true , musí to být ukazatel na true hodnotu.

Obecně platí, že jakýkoli typ, jehož nulová hodnota je možné a mělo by se s ním počítat, můžete zpracovat pouze "je to nulová hodnota" a "chybí na vstupu", pokud z něj uděláte ukazatel a nil hodnota ukazatele bude označovat případ "chybějící ze vstupu", zatímco hodnota není nil ukazatel na nulovou hodnotu bude označovat případ "je to nulová hodnota". Takže ve výše uvedeném příkladu, pokud string pole mohou také obsahovat hodnotu prázdného řetězce ("" ), pak z nich musíte také udělat ukazatele.

Všimněte si, že toho můžete dosáhnout také pomocí vlastní logiky zařazování a vyřazování, ale to je těžkopádnější a pomocí ukazatelů to získáte automaticky.



  1. Mongoose JS findOne vždy vrátí hodnotu null

  2. Jaká uživatelská oprávnění MongoDB potřebuji k přidání uživatele do nové/jiné mongo databáze?

  3. Stručná referenční příručka k různým databázím NoSQL

  4. Problém s instalací ovladače PHP MongoDb na wamp