sql >> データベース >  >> NoSQL >> MongoDB

Golang構造のomitemptyフラグでMongodbフィールドを更新する方法

    boolの値 タイプには2つの可能な値があります:false およびtrue 。そして、boolを使用して3つの異なる状態を「通信」したいとします。 フィールド、つまりフィールドを更新しない、フィールドをfalseに設定する フィールドをtrueに設定します 。これは明らかに不可能です。

    intについても同じことが言えます 値:0の値 フィールドを更新しないことと、フィールドを0に設定することの、2つの異なる選択肢を表すことはできません。 。

    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. MongoDBでコレクションの名前を変更するにはどうすればよいですか?

    2. 親キーが不明な場合にMongoDBを値でクエリする

    3. OpenShiftPythonmongoDB環境変数が設定されていない/接続できない

    4. MongoDBの配列から値を削除する3つの方法