2015-05-28 2 views
1

Как и в приведенном ниже коде, я вставил 4 и 5 в оболочку mongo. PyMongo получает их как 4.0 и 5.0. Я вставляю 7 из PyMongo. PyMongo получает его как 7.int to float conversion in Mongo find

Почему это происходит? Я нахожу это теневым, и я не хочу преследовать тихие производственные неудачи в будущем. < вставить здесь >>

СПОЙЛЕР ПРЕДУПРЕЖДЕНИЕ: Я попытался скрыть информацию, которая может помешать некоторым ученикам. Пожалуйста, будь осторожен.

От Монго:

$:~/dev/mongouniv$ mongo 
MongoDB shell version: 2.4.9 
connecting to: test 
> use m101 
switched to db m101 
> db.hw1.findOne() 

> db.hw1.insert({"key":4}) 
> db.hw1.insert({"key":5}) 
> db.hw1.find() 
{ "_id" : ObjectId("5566cccaa3e32a78d30eeddc"), "key" : 4 } 
{ "_id" : ObjectId("5566ccdda3e32a78d30eeddd"), "key" : 5 } 

От Python:

import pymongo 

from pymongo import MongoClient 

# connect to database 
connection = MongoClient('localhost', 27017) 

In [20]: connection.m101.hw1.insert({"key":7}) 
Out[20]: ObjectId('5566ce513b8aa04a7585120f') 

In [21]: list(connection.m101.hw1.find()) 
Out[21]: 
[ 
{u'_id': ObjectId('5566cccaa3e32a78d30eeddc'), u'key': 4.0}, 
{u'_id': ObjectId('5566ccdda3e32a78d30eeddd'), u'key': 5.0}, 
{u'_id': ObjectId('5566ce513b8aa04a7585120f'), u'key': 7}] 

Версии моих пакетов Ubuntu:

dpkg -s python-pymongo 
Version: 2.6.3-1build1 
dpkg -s mongodb-server 
Version: 1:2.4.9-1ubuntu2 
dpkg -s mongodb-clients 
Version: 1:2.4.9-1ubuntu2 

ответ

2

Как вы можете видеть из http://docs.mongodb.org/manual/core/shell-types/:

По умолчанию оболочка mongo обрабатывает все числа как значения с плавающей запятой.

+0

Итак, когда я вижу 5 в 'find', выводят его значение с плавающей запятой? – aitchnyu

+0

Да, ваши 4 и 5 - это поплавки. Попробуйте ввести одни и те же номера с помощью «NumberInt» - вы должны увидеть разницу – konart

+0

True. Я проверял с помощью 'db.hw1.find ({key: {$ type: 16}})' где ключ - int и 'db.hw1.find ({key: {$ type: 1}})' где ключ поплавок. – aitchnyu