E11000重复键错误,显式_id赋值声明它为null但实际上不是

时间:2018-05-26 09:46:46

标签: mongodb go mgo

这是旧的E11000错误,但有一个扭曲(是的,我搜索并发现许多相同的问题,但没有适用于此处的确切细节 - 主要是明确的_id分配。)

我正在手动为_id字段分配bson.NewObjectId(),因为我需要将ID返回给客户端 - 这是基于来自SO和GitHub的讨论,例如:{{3} }

https://github.com/go-mgo/mgo/issues/453

ID字段在结构中设置为:

ID bson.ObjectId `json:"_id" bson:"_id"`

https://github.com/Southclaws/ScavengeSurviveCore/blob/master/storage/player.go#L28-L32

到目前为止,我认为我没有错过任何东西。单元测试一个接一个地创建此对象的3个实例:

https://github.com/Southclaws/ScavengeSurviveCore/blob/master/types/player.go#L9-L23

第一个被创建得很好,它有_id分配给它(通过mongo-express检查)我甚至在调用.Insert之前打印出ID,同样的ID,一切都很好:

https://i.imgur.com/o3DlSY2.png

CREATING {ObjectIdHex("5b092f4aff3055468e3ce00a") playerID1 (...)

插入三个测试记录中的下一个时出现问题 - 完全相同的代码,并打印日志:

CREATING {ObjectIdHex("5b092f4aff3055468e3ce00b") playerID2 (...)

但它返回E11000:

E11000 duplicate key error collection: <db>.<collection> index: <collection>_id_1 dup key: { : null }

从我可以收集到的内容来看,它认为_id为空但是根据我能看到的所有证据,它根本不为空,因为bson.NewObjectId()字段之前已分配给_id字段.Insert被称为 - 对象在插入之前打印出来,ID就在那里。

我在这里缺少什么?

0 个答案:

没有答案