MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Envoyer une requête MongoDB vers un autre système :convertir en JSON puis décoder en BSON ? Comment le faire en langage Go ?

Après quelques recherches, j'ai trouvé le mejson bibliothèque, mais c'est uniquement pour le marshaling, j'ai donc décidé d'écrire un Unmarshaller.

Voici ejson (je l'ai écrit), pour l'instant c'est un ejson très simple -> bson convertisseur, il n'y a pas de bson -> ejson pourtant, vous pouvez utiliser mejson pour ça.

Un exemple :

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)

}