Home >Backend Development >Golang >Why Doesn't `mgo.FindId` Find My MongoDB Document?
Finding a Document by ID with mgo
Question:
In the code example below, a record known to exist in a MongoDB collection cannot be found using the FindId method. The code returns a zero value instead. What is the issue?
type id_cookie struct { IdCookie int } func get_id_mongo() int { session, err := mgo.Dial("127.0.0.1") if err != nil { panic(err) } defer session.Close() c := session.DB("id_bag").C("id_cookie") data := id_cookie{} err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) if (err2 != nil){ Info.Println("error") Info.Println(err2) } Info.Println(data) return data.IdCookie }
Answer:
The issue lies in the method signature of FindId. It takes only the ID as an argument, while Find requires a map where the field name is specified as well. To fix this, use the following code:
err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) // OR err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)
If no errors occur, the document has been found successfully. If the IdCookie field is still zero, it may be stored with a different name in MongoDB. Use struct tags to map it correctly:
type id_cookie struct { IdCookie int `bson:"myid"` }
Additionally, it's recommended to establish a single connection to MongoDB and reuse it, rather than creating a new connection for each query. Refer to the linked discussion for more details on query performance optimization.
The above is the detailed content of Why Doesn't `mgo.FindId` Find My MongoDB Document?. For more information, please follow other related articles on the PHP Chinese website!