Tark
@Tark
Pyramid'альный мир

Mongodb возвращает float вместо int. Как исправить?

Один и тот же запрос - db.struct.findOne() (с вариантами) возвращает странные результаты.

Mongo:
{
        "_id" : ObjectId("5447a21a8882de1f6ef963fd"),
        "number" : 1,
        "visible" : 1,
        "parents" : [ ],
        "child" : 0,
        "owner" : 0,
        "owner_url" : "",
        "type" : "shops",
        "id" : 1
}

Pymongo:
{
        'number': 1.0, 
        'visible': 1.0, 
        'parents': [], 
        'child': 0.0, 
        'owner': 0.0, 
        'owner_url':  '', 
        '_id': ObjectId('5447a21a8882de1f6ef963fd'), 
        'type':  'shops', 
        'id': 1.0
}


Всё бы ничего, но на том же самом движке работает другой проект, который таких вот сюрпризов не приносит, и шаблонизатор Jinja2 выдаёт целые значения, как и полагается. Что я мог сделать не так? Можно, конечно, переписать шаблоны, понаставив везде |int, но ведь должен быть куда более простой способ.
  • Вопрос задан
  • 2627 просмотров
Пригласить эксперта
Ответы на вопрос 3
@lega
MongoDB возвращает то что вы записали, если вы запишите int через pymongo то и вернется int, если писать из js-консоли, то нужно "привести" число к int с помощью NumberInt или NumberLong.
Ответ написан
Комментировать
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
В php в драйвере работы с монго можно было настроить какие значения брать, в php.ini
Думаю, в питоне что-то вроде этого должно быть, надо поискать
Ответ написан
ArtInt
@ArtInt
Если на один и тот же запрос в одной и той же базе возвращаются разные результаты из драйвера и из шелла mongo то это видимо проблема драйвера, а не mongodb. Не так ли?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы