Ошибка дублирующегося ключа E11000 с явным присвоением _id, утверждающим, что оно нулевое, но на самом деле это не - PullRequest
0 голосов
/ 26 мая 2018

Это старая ошибка E11000, но с изюминкой (и да, я искал и нашел многие из того же вопроса, но без точных деталей, которые здесь применяются - в основном явное назначение _id).

I 'm вручную присваивая поле _id с помощью bson.NewObjectId(), потому что мне нужно вернуть идентификатор клиенту - это было основано на обсуждениях в SO и GitHub, например: https://github.com/go-mgo/mgo/issues/453

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

Поле идентификатора настроено в структуре следующим образом:

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

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

Пока я не думаю, что что-то пропустил.Модульные тесты создают 3 экземпляра этого объекта один за другим:

https://github.com/Southclaws/ScavengeSurviveCore/blob/master/server/handler_admin_test.go#L21-L56

Первый создается нормально, ему назначено _id (проверено с помощью mongo-express)и я даже распечатал идентификатор прямо перед вызовом .Insert, тот же идентификатор, все в порядке:

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 - и объект распечатывается непосредственно перед вставкой иИдентификатор есть.

Что мне здесь не хватает?

...