这是旧的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,一切都很好:
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就在那里。
我在这里缺少什么?