MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Senden einer MongoDB-Abfrage an ein anderes System:Konvertierung in JSON und dann Dekodierung in BSON? Wie macht man das in der Go-Sprache?

Nach einiger Recherche fand ich den mejson Bibliothek, aber es ist nur für Marshalling, also habe ich mich entschieden, einen Unmarshaller zu schreiben.

Siehe ejson (Ich habe es geschrieben), im Moment ist es ein sehr einfacher ejson -> bson Konverter gibt es kein bson -> ejson dennoch können Sie mejson verwenden dafür.

Ein Beispiel :

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)

}