如果我在mgo中为文档生成新的对象ID:
obId := bson.NewObjectId()
然后插入它,它最终以mongo(通过cli查找)
"_id" : "U�`�\u0006@�\rU\u0000\u0000\u0001"
什么时候应该
"_id" : ObjectId("559a47643d9827f0d9405420")
如果我尝试通过
更新我生成id的现有文档,也是如此obId := bson.ObjectIdHex(stringId)
它仍然被序列化为损坏的格式。
我尝试插入的结构如下所示:
type MyStruct struct {
Id bson.ObjectId `bson:"_id,omitempty" json:"id"`
...
}
答案 0 :(得分:2)
表示"U�`�\u0006@�\rU\u0000\u0000\u0001"
清楚地表明ObjectId是作为字符串而不是正确键入的对象id发送到数据库的。之前的每一个这样的情况都是应用程序端的代码路径错误地明确地传递字符串。我建议调查在该集合中插入对象的每个代码路径,如果找不到将其作为实际字符串发送的情况,则尝试创建一个再现器并将其上游报告给mgo驱动程序。
更新:根据您在下面的评论,问题是由于应用程序的某些部分使用的是来自某个程序包的ObjectId
类型,而该程序包与通信期间实际使用的不是数据库。这具有上述效果:来自错误包的ObjectId
类型只是一个普通字符串,只要涉及正确的bson
包。