In mongodb-go-driver, how to marshal/unmarshal BSON in to a struct

The official MongoDB driver uses the objectid.ObjectID type for MongoDB ObjectIds. This type is:

type ObjectID [12]byte

So you need to change your struct to:

type Language struct {
    ID         objectid.ObjectID   `json:"id" bson:"_id"`             
    Name       string   `json:"name" bson:"name"`
    Vowels     []string `json:"vowels" bson:"vowels"`
    Consonants []string `json:"consonants" bson:"consonants"`
}

I had success with:

m := make(map[string]Language)
cursor, e := collection.Find(context.Background(), bson.NewDocument(bson.EC.String("name", id)))

for cursor.Next(context.Background()) {

    l := Language{}
    err := cursor.Decode(&l)
    if err != nil {
        //handle err
    }
    m[id] = l // you need to handle this in a for loop or something... I'm assuming there is only one result per id
}

Newer "github.com/mongodb/mongo-go-driver" expects object IDs defined as

type Application struct {
    ID      *primitive.ObjectID `json:"ID" bson:"_id,omitempty"`
}

This serializes into JSON "ID":"5c362f3fa2533bad3b6cf6f0" and here is how you get the ID from insert result

if oid, ok := res.InsertedID.(primitive.ObjectID); ok {
    app.ID = &oid
}

Convert from string

appID := "5c362f3fa2533bad3b6cf6f0"    
id, err := primitive.ObjectIDFromHex(appID)
if err != nil {
    return err
}
_, err = collection.DeleteOne(nil, bson.M{"_id": id})

Convert into string

str_id := objId.Hex()

I was getting

cannot decode objectID into an array

so i changed to

ID interface{} `bson:"_id,omitempty"`

without any issues


Update: New changes were made recently, now have to change to:

import "github.com/mongodb/mongo-go-driver/bson/primitive"

type Language struct {
    ID         primitive.ObjectID `bson:"_id,omitempty"` // omitempty to protect against zeroed _id insertion         
    Name       string   `json:"name" bson:"name"`
    Vowels     []string `json:"vowels" bson:"vowels"`
    Consonants []string `json:"consonants" bson:"consonants"`
}

And take the ID value:

log.Println("lang id:", objLang.ID)
...

Tags:

Mongodb

Go