/ / mgo NewObjectId корумпиран от insert - mongodb, go, mgo

mgo NewObjectId корумпиран на вмъкване - mongodb, go, mgo

Ако генерирам нов идентификатор на обект за документ в mgo:

obId := bson.NewObjectId()

и след това го вмъкнете, завършва в mongo (гледайки през кли) като

"_id" : "U�`�u0006@�rUu0000u0000u0001"

Когато трябва да бъде

"_id" : ObjectId("559a47643d9827f0d9405420")

Същото важи и ако се опитам да актуализирам съществуващ документ, в който генерирам идентификационния номер

obId := bson.ObjectIdHex(stringId)

Той все още се сериализира в повредения формат.

Моята структура, която се опитвам да вмъкна, изглежда така:

type MyStruct struct {
Id            bson.ObjectId `bson:"_id,omitempty" json:"id"`
...
}

Отговори:

2 за отговор № 1

Представянето "U�`�u0006@�rUu0000u0000u0001" ясно показва, че е изпратено ObjectIdкъм базата данни като низ, а не като правилно въведен идентификатор на обект. Всеки такъв случай преди това е бил код в пътя на приложението, доставящ стринга като погрешно. Препоръчвам да се изследва всеки код, който вмъква обекти в тази колекция и ако не можете да намерите случай, който да го изпраща като действителен низ, след това се опитайте да създадете възпроизводител и да го докладвате нагоре към драйвера mgo.

Update: По вашия коментар по-долу, проблемът е причинен, защото част от приложението използва ObjectId тип от пакет, който не е действително използван при комуникацията с базата данни. Това има описания по-горе ефект: ObjectId типът, идващ от грешния пакет, е само нормален низ, доколкото е правилен bson пакет.