Cannot retrieve “_id” value using mgo with golang

家住魔仙堡 提交于 2019-12-01 02:47:07

I've found the problem.

In the code:

Id      bson.ObjectId `json:"id"        bson:"_id,omitempty"`

between json: and bson:, I used a tab instead of space so the problem occurs. If I change this line of code to:

Id      bson.ObjectId `json:"id" bson:"_id,omitempty"`

With one space between json: and bson:, it turns out to work just fine.

mongoUser

I had the same issue and was able to figure out that I had my imports mixed up. I have a feeling that Gustavo could not reproduce the problem because you had not included what your imports looked like and he filled them out correctly.

Just to explain briefly how my issue was similar:

This -

err := db.Find(bson.M{"_id": bson.ObjectIdHex(userId)}).One(&user)

was not working for me, it would not get the info from the database and would return this-

{ObjectIdHex("")    }

How I fixed it...we found that

In the server.go page, one of the imports was this.

"gopkg.in/mgo.v2”

Should have been this.

"labix.org/v2/mgo”

The real bug is not the use of the gopkg.in/mgo.v2. It is that the code was mixing labix.org/ and gopkg.in import modules.

So the trick is to use this.

"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson”

Or this.

"labix.org/v2/mgo"
"labix.org/v2/mgo/bson”

But not mix them. The top one is the preferred one, as that is what the latest docs use.

Hope this helps.

Your code is fine.

Here is a self-contained example that includes your code, unmodified:

And here is the output:

"R\x94\xa4J\xff&\xc61\xc7\xfd%\xcc" "Some Title"

The issue is elsewhere. The collection may really not have an _id field, for example.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!