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

カスタムBSONマーシャリングの処理

    カスタムbsonマーシャリング/アンマーシャリングはほぼ同じように機能します。それぞれGetterインターフェイスとSetterインターフェイスを実装する必要があります

    このようなものが機能するはずです:

    type Currency struct {
        value        decimal.Decimal //The actual value of the currency.
        currencyCode string          //The ISO currency code.
    }
    
    // GetBSON implements bson.Getter.
    func (c Currency) GetBSON() (interface{}, error) {
        f := c.Value().Float64()
        return struct {
            Value        float64 `json:"value" bson:"value"`
            CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
        }{
            Value:        f,
            CurrencyCode: c.currencyCode,
        }, nil
    }
    
    // SetBSON implements bson.Setter.
    func (c *Currency) SetBSON(raw bson.Raw) error {
    
        decoded := new(struct {
            Value        float64 `json:"value" bson:"value"`
            CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
        })
    
        bsonErr := raw.Unmarshal(decoded)
    
        if bsonErr == nil {
            c.value = decimal.NewFromFloat(decoded.Value)
            c.currencyCode = decoded.CurrencyCode
            return nil
        } else {
            return bsonErr
        }
    }
    



    1. ノードでRedis期限切れイベントを受信するにはどうすればよいですか?

    2. MongooseおよびNodeJ、Expressを使用したMongoDB4.0トランザクション

    3. Redisクラスター/負荷分散

    4. MongoDBの公式C#ドライバーを使用して「ID」で1つの「ドキュメント」を削除するにはどうすればよいですか?