2016-04-07 6 views
1

У меня есть запрос, который из этого кодаКак получить доступ к полю запроса

cursor = db.MCAddrPortPairs.find({'Symbol' : symbol})[:1] 
print str(json.dumps({'results': list(cursor)}, 
         default = bson.json_util.default, 
         indent = 4)) 

возвращает следующий документ:

{ 
    "results": [ 
     { 
      "MCPort": 345, 
      "Symbol": "EUR/USD", 
      "_id": { 
       "$oid": "56fc34e961fed32064e656b0" 
      }, 
      "MCAddr": "239.0.0.222" 
     } 
    ] 
} 

MCAddr является строкой и MCPort является внутром. Как получить доступ к полям MCAddr и MCPort в python?

EDIT 1

Если я говорю

doc = db.MCAddrPortPairs.find({'Symbol' : symbol})[:1] 

symbolMCIPAddrStr = doc["MCAddr"] 
symbolMCPort = doc["MCPort"] 

Я получаю сообщение об ошибке:

File "mc.py", line 44, in initializeMongo 
    symbolMCIPAddrStr = doc["MCAddr"] 
    File "/home/idf/anaconda/lib/python2.7/site-packages/pymongo/cursor.py", line 531, in __getitem__ 
    self.__check_okay_to_chain() 
    File "/home/idf/anaconda/lib/python2.7/site-packages/pymongo/cursor.py", line 342, in __check_okay_to_chain 
    raise InvalidOperation("cannot set options after executing query") 
pymongo.errors.InvalidOperation: cannot set options after executing query 

EDIT 2

Если вместо этого я сказать

doc = db.MCAddrPortPairs.find_one({'Symbol' : symbol})[:1] 


Traceback (most recent call last): 
    File "mc.py", line 86, in <module> 
    main() 
    File "mc.py", line 63, in main 
    initializeMongo("EUR/USD") 
    File "mc.py", line 39, in initializeMongo 
    doc = db.MCAddrPortPairs.find_one({'Symbol' : symbol})[:1] 
TypeError: unhashable type 
+0

Возможный дубликат [данных Python доступа в объект JSON] (http://stackoverflow.com/questions/11241583/python-accessing-data-in -json-object) –

ответ

2

Вы можете получить доступ к документу, возвращаемому курсором, не нужно сбрасывать результаты в JSON. Я хотел бы также использовать find_one() если нужен только один документ:

doc = db.MCAddrPortPairs.find_one({'Symbol' : symbol}) 
port, address = doc["MCPort"], doc["MCAddr"] 
print(port, address) 
+0

Я не хочу его печатать. Я хочу, чтобы каждое значение хранилось в локальной переменной, например. И есть только один элемент, поэтому нет ничего, что можно было бы зацикливать. – Ivan

+0

@ Ивань, пожалуйста, проверьте обновление. – alecxe

+0

См. Редактировать 1 в сообщении. Кажется, не работает. – Ivan