MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Обработка на персонализирано BSON маршалиране

Персонализираното bson Marshalling/Unmarshalling работи почти по същия начин, трябва да внедрите съответно интерфейсите 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.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Примерни оператори на MongoDB

  2. Позволете на новия ClusterControl да защити вашите внедрявания на MongoDB

  3. Генериране на структура за агрегиране

  4. [Инфографика] Сравняване на Cassandra с MongoDB

  5. Как да проверите дали полето на масива съдържа уникална стойност или друг масив в MongoDB?