MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да актуализирате полета на Mongodb с флаг omitempty в структурата на Golang

Стойност bool type има 2 възможни стойности:false и true . И искате да "комуникирате" 3 различни състояния с bool поле, а именно да не актуализирате полето, да зададете полето на false и да настроите полето на true . Това очевидно не е възможно.

Същото важи и за int стойности:стойност 0 не може да представлява 2 различни избора, а именно да не се актуализира полето и да се зададе на 0 .

Ако искате да запазите omitempty опции в стойностите на маркера, тогава, за да работи, трябва да промените полетата на указатели:

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

Начинът, по който работи е, че ако показалецът е nil , то ще бъде пропуснато (това е "omitempty" опция). Ако полето не е nil указател, той ще бъде актуализиран до посочената стойност.

Така например, ако искате да изключите bool полето, след което *bool стойността трябва/ще бъде nil . Ако искате да го зададете/актуализирате на false , трябва да е указател към false стойност. Ако искате да го зададете/актуализирате на true , трябва да е указател към true стойност.

Като цяло всеки тип, чиято нулева стойност е възможно и трябва да се брои с него, можете да обработвате само „това е нулева стойност“ и „липсва във входа“, ако го направите указател, и nil стойността на указателя ще обозначава случай „липсва от входа“, докато не-nil указателят към нулевата стойност ще обозначи случая "това е нулева стойност". Така че в горния пример, ако string полетата могат също да приемат стойността на празния низ ("" ), тогава трябва да им направите и указатели.

Обърнете внимание, че можете да постигнете това и с помощта на персонализирана логика за маршалинг и демаршалинг, но това е по-тромаво и използването на указатели ви дава това автоматично.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB документите изтичат твърде скоро (mongoose)

  2. Каква би била мотивацията за интегриране на mongodb със solr

  3. $ проекция в mongoDB findOneAndUpdate()

  4. изчакайте други внедрявания да започнат да се изпълняват, преди да могат да бъдат създадени други?

  5. Как да използвам $add във функцията update() в Mongo?