Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Kemas Kini MongoDB dengan Bendera `omitempty` Golang?

Bagaimana untuk Mengendalikan Kemas Kini MongoDB dengan Bendera `omitempty` Golang?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-24 11:56:16594semak imbas

How to Handle MongoDB Updates with Golang's `omitempty` Flag?

Mengemas kini Medan MongoDB dengan Bendera Omitempty dalam Struktur Golang

Bendera omitempty dalam struktur Golang membolehkan pembangun mengecualikan medan daripada marshalling JSON jika mereka mempunyai nilai sifar. Walau bagaimanapun, tingkah laku ini boleh menimbulkan cabaran apabila mengemas kini dokumen MongoDB.

Pertimbangkan borang Kupon yang sesetengah medan adalah pilihan. Struktur Golang yang mewakili borang mungkin mempunyai bendera yang diabaikan pada medan ini seperti:

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

Masalah

Isu timbul apabila mengemas kini borang. Jika kotak semak yang telah ditandakan sebelum ini (medan bool) dinyahtanda semasa penyerahan borang, bendera omitempty mengecualikannya daripada struktur. Akibatnya, nilai tidak dikemas kini dalam dokumen MongoDB.

Begitu juga, jika hanya medan yang diperlukan disediakan dalam permintaan REST API, MongoDB akan menimpa keseluruhan dokumen, termasuk nilai yang tidak sepatutnya dikemas kini.

Penyelesaian

Untuk mengatasi isu ini, adalah perlu untuk menukar medan beranotasi dengan mengabaikan penunjuk. Ini membolehkan medan mempunyai nilai sifar, yang mewakili keadaan "tidak dikemas kini":

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

Dengan pengubahsuaian ini, penunjuk sifar menunjukkan bahawa medan itu tidak boleh dikemas kini. Jika penunjuk bukan nol disediakan, nilainya akan ditetapkan dalam dokumen MongoDB. Ini secara berkesan menyelesaikan isu dengan mengemas kini medan bool dan int sambil mengekalkan bendera omitempty.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Kemas Kini MongoDB dengan Bendera `omitempty` Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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