[英]PyMongo misbehaving with floating point numbers
我正在使用 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 中,Raspbian 上的浮點插入也是不正常的。 這可能是因為有限的浮點支持或不推薦使用的 mongoDB 版本(最新版本的二進制文件不適用於 ARM)。 無論如何,我將在今天晚些時候用 rpi2 嘗試它並檢查它是否有所作為。
基於此
c.enter_data("24.3")
post = {"auth": data, ... # 沒有在內部進行轉換
您實際上是在插入一個字符串,而不是一個浮點數
您應該能夠使用c.enter_data(24.3)
插入浮點數
為了進一步調試,我建議:
顯然,插入工作正常,但在查詢時它以錯誤的格式返回對象。 當我從 rpi 插入一個浮點數到遠程數據庫時,它工作得很好。 當在計算機上查詢該對象時,該對象將按原樣顯示:
`{ "_id" : ObjectId("557d828b08139add2323aeaf"), "A" : 12.1 }`
但是當從 rpi 查詢時,它顯示為:
{ "_id" : ObjectId("557d828b08139add2323aeaf"), "A" : 0.04667261646131403e-60 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.