2016-01-26 1 views
1

При использовании курсора для итерации по коллекции, как это так,Как найти имя (ключ) значений в коллекции, когда оно выполняется с помощью PyMongo?

import pymongo 
cursor = pymongo.Connection().test_db.test_collection.find() 
for item in cursor: 
    print item 
    #this will print the item as a dictionary 

только значения возвращаются. Я ищу способ получить доступ к названию значения.

Я нашел аналогичный метод под названием getCollectionNames(), однако он используется для возврата каждого имени коллекции в базе данных.


Быстрые [Hacky] Исправлено: Храните имя коллекции внутри самой коллекции и простого вызова названия от значения, возвращаемого курсором с помощью item.name

ответ

0

Вы можете итерацию над топ имена полого уровня и их значение, используя этот фрагмент код:

for fieldname, fieldvalue in item.iteritems(): 
    print (fieldname, fieldvalue) 
+0

Спасибо, что ответили так быстро. Я столкнулся с этим [решением] (http://stackoverflow.com/questions/3294889/iterating-over-dictionaries-using-for-loops-in-python) до публикации этого вопроса, но я сразу же отказался от него, так как _iteritems() _ - метод для объектов словаря, и он не был указан [здесь] (http://api.mongodb.org/python/current/api/pymongo/cursor.html) в соответствии с методами, применимыми к объектам курсора – user3720570

+0

Объекты курсора просто вложенные словари или, по крайней мере, могут рассматриваться как таковые. – Jaco

0

Если я правильно понимаю, вы ищете способ, чтобы получить имя коллекции вы работаете или что вы опрошены; Если это так, вот как вы это делаете: пользователь collection.name

import pymongo 
cursor = pymongo.Connection().test_db.test_collection.find() 
print cursor.collection.name 
for item in cursor: 
    print item 
    #this will print the item as a dictionary 

Если вы имеете в виду, чтобы получить ключи внутри самой коллекции. Вы можете просто добавить дополнительный цикл и получить ключи для каждого документа в курсоре. пример:

import pymongo 
cursor = pymongo.Connection().test_db.test_collection.find() 
print cursor.collection.name 
for item in cursor: 
    for key in item: 
     print key