PyMongo用浮点数行为不端

时间:2015-06-18 06:57:47

标签: python mongodb pymongo raspbian database

我正在使用PyMongo将数据保存到MongoDB。以下是我的代码:

from pymongo import MongoClient
import time


class data2db:
    def __init__(self):
        pass

    def enter_data(self, data):
        client = MongoClient('127.0.0.1', 27017)
        db = client.db
        coll = db.Temperature1
        post = {"auth": data,
                "Time": time.asctime(time.localtime(time.time()))}
        post_ = coll.insert(post)


c = data2db()

c.enter_data(24.3)

然而,当我检索这个对象时,我得到:

{ "_id" : ObjectId("558019749f43b8c19779c106"), "auth" : -0.000063384, "Time" : "Tue Jun 16 08:41:24 2015" }

当我用整数尝试相同的代码时,它工作正常。我在RaspberryPi上使用MongoDB 2.6.3和最新版本的Raspbian和python 2.7.3。我通过以下命令从Raspbian存储库安装了Pymongo:

sudo apt-get install python-pymongo

有人可以帮帮我吗?

更新: 在使用Ubuntu 14.04 LTS,mongoDB 3.0.1,python 2.7.3和pyMongo 2.8的英特尔计算机上,相同的代码表现完美,但是当涉及到Raspbian时,行为会发生变化。即使在蒙古贝壳上的mongo shell浮点插入也行为不端。可能是因为有限的浮点支持或不推荐使用的mongoDB版本(最新版本的二进制文件不适用于ARM)。在任何情况下,我今天晚些时候都会用rpi2尝试它并检查它是否有所不同。

2 个答案:

答案 0 :(得分:1)

基于此

  

c.enter_data( “24.3”)

     

post = {“auth”:data,...#内部没有转换

您实际上是在插入字符串,而不是浮点数

您应该可以使用c.enter_data(24.3)

插入花车

为了进一步调试我建议:

  • 在mongo命令行客户端上尝试命令,以确认浮点行为
  • 当您在CLI或Python代码中插入时,获取插入对象的ID,以确保您正在查看正确的对象

答案 1 :(得分:0)

显然插入工作正常但在查询时它以错误的格式返回对象。当我从rpi插入一个浮点数到远程数据库,然后它工作得很好。当在计算机上查询对象时,它被显示为它应该是:

`{ "_id" : ObjectId("557d828b08139add2323aeaf"), "A" : 12.1 }` 

但是从rpi查询时显示为:

{ "_id" : ObjectId("557d828b08139add2323aeaf"), "A" : 0.04667261646131403e-60 }