MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara memperbarui bidang Mongodb dengan bendera omitempty di struktur Golang

Nilai bool type memiliki 2 kemungkinan nilai:false dan true . Dan Anda ingin "berkomunikasi" 3 status berbeda dengan bool bidang, yaitu untuk tidak memperbarui bidang, untuk mengatur bidang ke false dan untuk menyetel bidang ke true . Ini jelas tidak mungkin.

Hal yang sama berlaku untuk int nilai:nilai 0 tidak dapat mewakili 2 pilihan berbeda, yaitu tidak memperbarui bidang dan menyetelnya ke 0 .

Jika Anda ingin menyimpan omitempty opsi dalam nilai tag, lalu untuk membuatnya berfungsi, Anda harus mengubah bidang menjadi pointer:

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

Cara kerjanya adalah jika pointernya nil , itu akan ditinggalkan (ini adalah "penghilangan" pilihan). Jika bidangnya bukan nil pointer, itu akan diperbarui ke nilai runcing.

Jadi misalnya jika Anda ingin mengecualikan bool kolom, lalu *bool nilai harus / akan menjadi nil . Jika Anda ingin mengatur / memperbaruinya menjadi false , itu harus berupa penunjuk ke false nilai. Jika Anda ingin mengatur / memperbaruinya ke true , itu harus berupa penunjuk ke true nilai.

Secara umum, semua jenis yang nilai nol dimungkinkan dan harus dihitung dengan, Anda hanya dapat menangani "itu adalah nilai nol" dan "itu hilang dari input" jika Anda menjadikannya sebagai pointer, dan nil nilai pointer akan menunjukkan kasus "hilang dari input", sedangkan non-nil pointer ke nilai nol akan menunjukkan kasus "itu adalah nilai nol". Jadi pada contoh di atas jika string bidang juga bisa mengambil nilai string kosong ("" ), maka Anda juga harus menjadikannya pointer.

Perhatikan bahwa Anda juga dapat mencapai ini menggunakan logika marshaling dan unmarshaling khusus, tetapi itu lebih rumit, dan menggunakan pointer memberi Anda ini secara otomatis.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengambil semua elemen yang cocok yang ada di dalam array di Mongo DB?

  2. Bisakah Anda memiliki mongo $push prepend alih-alih menambahkan?

  3. Mongoosejs menyegarkan dokumen

  4. Mongoose read-only tanpa skema

  5. Penghitung atom Postgres vs MongoDB