Как запретить mgo демаршалировать int в float64

У меня есть неизвестные данные структуры json, хранящиеся в mongodb. У них есть поля для представления времени unix следующим образом:

"date": 1424803567,

Я использую mgo для загрузки их в bson.M.

var result bson.M
iter := c.Find(q).Iter()
for iter.Next(&result) {

Эти поля времени unix превратились в fload64 вместо int.

 "date": 1.424728798e+09,

Итак, как предотвратить это в случае выше? Спасибо!


person Wilson Wang    schedule 24.02.2015    source источник


Ответы (1)


Mgo не преобразует целое число в число с плавающей запятой, если только целевое значение явно не указано приложением как число с плавающей запятой. Mgo возвращает здесь значение с плавающей запятой, потому что значение, хранящееся в базе данных, является значением с плавающей запятой.

Вы можете преобразовать значение с плавающей запятой в целое число, указав тип с помощью структуры:

var result struct {
  Date int64 `bson:"date"`
}
for iter.Next(&result) {
  ...
}
person Cerise Limón    schedule 24.02.2015
comment
Только что проверил данные в базе. Это действительно поплавок. Итак, проблема с вводом данных. Это решается с помощью декодирования с UseNumber() вместо прямого Unmarshal. Спасибо! - person Wilson Wang; 25.02.2015