Golang mgo MongoDB bson.ObjectId не ошибка utf-8

Я разрабатываю Go на своем Mac, используя драйвер mongo и mgo.

На моем Mac все отлично работает. Когда мой друг работает с той же кодовой базой на своем компьютере с Windows, мы получаем эти странные не utf-8 bson.ObjectIds.

Вот скриншот с mongolab.com (размещенный сервер mongo)

введите здесь описание изображения

Мой код просто использует:

thing.Id = bson.NewObjectId() 
thing.eventId = event.Id

У кого-нибудь была эта проблема? Кто-нибудь знает, как с этим бороться

Изменить: все функции bson, используемые в этой кодовой базе:

thing.Id = bson.NewObjectId()
thing.Id = bson.ObjectIdHex(id)
idString = thing.Id.Hex()

Спасибо.


person collinglass    schedule 15.03.2015    source источник
comment
Пожалуйста, покажите объявления типов для полей _id и eventId.   -  person Cerise Limón    schedule 15.03.2015
comment
Как вы записываете поле thing.eventId в базу данных? Поле eventId игнорируется кодировщиком BSON, поскольку это поле не экспортируется.   -  person    schedule 16.03.2015
comment
вы разобрались с этой проблемой? Думаю, у меня та же проблема, см. stackoverflow. ком/вопросы/31244438/   -  person byrnedo    schedule 06.07.2015
comment
Это была устаревшая версия mgo в системе Windows моих друзей.   -  person collinglass    schedule 06.07.2015


Ответы (1)


Символ замены Unicode на снимке экрана предполагает, что приложение обрабатывает идентификаторы объектов как текст в кодировке UTF-8. Идентификаторы объектов содержат двоичные данные, а не текст в кодировке UTF-8.

Используйте метод Hex для преобразования идентификатора объекта в удобочитаемый текст. .

Используйте ObjectIdHex, чтобы преобразовать шестнадцатеричное строковое представление обратно в идентификатор объекта. Будьте осторожны, чтобы защитить вызов ObjectIdHex с помощью IsObjectIdHex.

person Cerise Limón    schedule 15.03.2015
comment
Может быть, utf-8 не моя проблема. Когда я использую свой Mac, на приведенном выше снимке будут отображаться все читаемые человеком символы. Когда объекты создаются/используются на компьютере с Windows, мы получаем эти странные символы. И это на сайте mongolab. - person collinglass; 15.03.2015
comment
Из документации совершенно очевидно, что они используют строки Go просто как набор байтов, и поэтому я ожидаю интересных результатов, если попытаюсь напечатать его как есть (например, без форматирования %x или %q). Это совершенно законно в Go (хотя обычно для этого используется []byte, преимущество использования string заключается в том, что он доступен только для чтения). - person Dave C; 15.03.2015
comment
Если бы я был на их месте и хотел использовать базовый тип строки, я бы сделал собственный type ObjectIDType string (но с лучшим именем), чтобы было понятнее, что это не простая строка. - person Dave C; 15.03.2015
comment
comment
@ThunderCat d'о, я слишком быстро прочитал это, игнорируйте мой второй комментарий :^) - person Dave C; 15.03.2015