MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Invio di una query MongoDB a un sistema diverso:conversione in JSON e quindi decodifica in BSON? Come farlo in lingua Go?

Dopo alcune ricerche ho trovato il mejson libreria, tuttavia è solo per il marshalling, quindi ho deciso di scrivere un Unmarshaller.

Ecco ejson (L'ho scritto), in questo momento è un ejson molto semplice -> bson convertitore, non c'è bson -> ejson tuttavia, puoi usare mejson per quello.

Un esempio :

const j = `{"_id":{"$oid":"53c2ab5e4291b17b666d742a"},"last_seen_at":{"$date":1405266782008},"display_name":{"$undefined":true},
"ref":{"$ref":"col2", "$id":"53c2ab5e4291b17b666d742b"}}`

type TestS struct {
    Id          bson.ObjectId `bson:"_id"`
    LastSeenAt  *time.Time    `bson:"last_seen_at"`
    DisplayName *string       `bson:"display_name,omitempty"`
    Ref         mgo.DBRef     `bson:"ref"`
}

func main() {
    var ts TestS
    if err := ejson.Unmarshal([]byte(j), &ts); err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", ts)

    //or to convert the ejson to bson.M

    var m map[string]interface{}
    if err := json.Unmarshal([]byte(j), &m); err != nil {
        t.Fatal(err)
    }
    err := ejson.Normalize(m)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", m)

}