Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Medan Pilihan dengan `omitempty` dalam Go Apabila Mengemas kini Dokumen MongoDB?

Bagaimana Mengendalikan Medan Pilihan dengan `omitempty` dalam Go Apabila Mengemas kini Dokumen MongoDB?

Susan Sarandon
Lepaskan: 2024-11-24 21:46:36
asal
961 orang telah melayarinya

How to Handle Optional Fields with `omitempty` in Go When Updating MongoDB Documents?

Mengendalikan Medan Pilihan dengan Kemas Kini Omitempty dan MongoDB

Apabila berurusan dengan borang yang mengandungi medan pilihan, adalah perkara biasa untuk mewakili medan tersebut sebagai rentetan kosong, nilai boolean palsu atau integer bernilai sifar dalam JSON. Walau bagaimanapun, apabila menggunakan bendera omitempty dalam struktur Golang, nilai ini secara eksplisit diabaikan semasa pemetaan, yang boleh membawa kepada isu semasa mengemas kini dokumen dalam MongoDB.

Masalahnya:

Pertimbangkan struktur Kupon dalam Golang dengan medan ditandakan sebagai kosong:

type Coupon struct {
    Id               int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Status           bool   `json:"status" bson:"status"`
}
Salin selepas log masuk

Semasa simpan awal, semua medan bukan kosong berjaya disimpan dalam MongoDB. Walau bagaimanapun, selepas kemas kini berikutnya, jika mana-mana medan pilihan telah diubah suai kepada nilai kosong (cth., kotak pilihan yang tidak ditandakan), bendera omitempty menghalang nilai kosong daripada dipetakan ke dalam struktur. Akibatnya, operasi kemas kini gagal mengubah suai nilai medan sedia ada.

Penyelesaian:

Isu timbul kerana jenis bool dan int hanya mempunyai dua nilai yang mungkin (salah dan benar, 0 dan bukan sifar, masing-masing). Untuk menampung keperluan untuk mewakili tiga keadaan (bukan kemas kini, ditetapkan kepada palsu atau ditetapkan kepada benar) untuk medan bool dan kes serupa untuk medan int, medan struktur hendaklah diubah suai untuk menggunakan penunjuk.

type Coupon struct {
    Id               *int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Status           *bool   `json:"status" bson:"status"`
}
Salin selepas log masuk

Dengan penunjuk, nilai sifar mewakili medan yang ditinggalkan. Untuk penunjuk bukan nol, nilai yang ditunjuk mewakili nilai medan. Oleh itu, senario berikut boleh dikendalikan:

  • Untuk mengecualikan medan bool, nilai *bool hendaklah sifar.
  • Untuk menetapkan / mengemas kininya kepada palsu, ia mestilah penunjuk kepada nilai palsu.
  • Untuk menetapkan / mengemas kininya kepada benar, ia mestilah penunjuk kepada benar nilai.

Dengan menggunakan penunjuk dan bendera omitempty, anda boleh mengendalikan medan pilihan dalam struktur Golang dengan berkesan sambil memastikan kemas kini dilakukan dengan betul tanpa mengatasi nilai sedia ada dalam MongoDB.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Medan Pilihan dengan `omitempty` dalam Go Apabila Mengemas kini Dokumen MongoDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan