mgo NewObjectId 在插入时损坏

mgo NewObjectId corrupt on insert

如果我在 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"`
    ...
}

表示 "U�`�\u0006@�\rU\u0000\u0000\u0001" 清楚地表明 ObjectId 作为字符串而不是作为正确类型的对象 ID 发送到数据库。之前的每个此类案例都是应用程序端的代码路径错误地显式传递字符串。我建议调查在该集合中插入对象的每个代码路径,如果您找不到将其作为实际字符串发送的情况,则尝试创建一个复制器并将其向上游报告给 mgo 驱动程序。

更新: 根据您在下面的评论,问题的产生是因为应用程序的某些部分使用的包中的 ObjectId 类型不是在与数据库通信期间实际使用。这具有上述效果:就正确的 bson 包而言,来自错误包的 ObjectId 类型只是一个普通字符串。