MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Obsługa niestandardowego marszałkowania BSON

Niestandardowe Marshalling/Unmarshalling bson działa prawie w ten sam sposób, musisz zaimplementować odpowiednio interfejsy Getter i Setter

Coś takiego powinno działać :

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. Dołącz ciąg na końcu istniejącego pola w MongoDB

  2. Dane sprężyny Dopasuj i filtruj zagnieżdżoną tablicę

  3. Zapytanie o dokumenty, w których rozmiar tablicy jest większy niż 1

  4. Jak korzystać z MongoRegex (sterownik MongoDB C#)

  5. Mongoose nadpisuje dokument zamiast pól `$set`