mongodbgomgo

How to get ObjectId (_id) of my document in MGO mongo db driver for golang


I'm working with MGO (cause I didn't found anything better that it). I'have played with it and have got some result but I don't understand how to get the _id (internal Mongo ObjectId) of document received?

For ex:

type FunnyNumber struct {
    Value int
    _id string
}

session, err := mgo.Dial("127.0.0.1:27017")
if err != nil {
    panic(err)
}
defer session.Close()

// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)

c := session.DB("m101").C("funnynumbers")

funnynumber := FunnyNumber{}
err = c.Find(bson.M{}).One(&funnynumber)
if err != nil {
    log.Fatal(err)
}

fmt.Println("Id one:", funnynumber._id)  // Nothing here? WHy? How to get it.
fmt.Println("Value one:", funnynumber.Value)  // 62. It's OK!

Could someone help me, please? Ot where might I read some info about it? I haven't found anything in the MGO doc

Schema of my document is:

{ "_id" : ObjectId("50778ce69331a280cf4bcf90"), "value" : 62 }

Thanks!


Solution

    1. Change _id variable to uppercase(ID) to make it exportable.
    2. Use bson.ObjectID as its type.
    3. Add tag for struct FunnyNumber Id variable. field

    Above three things should be done to get object Id value.

    import "labix.org/v2/mgo/bson"
    
    type FunnyNumber struct {
        Value int `json:"value"`
        Id bson.ObjectId `bson:"_id,omitempty"` // only uppercase variables can be exported
    }
    

    Take a look at package BSON for more understanding on using bson tags when working with mongodb