如何将pymongo.cursor.Cursor转换为dict?

时间:2015-03-10 16:10:55

标签: python mongodb dictionary mongodb-query pymongo

我正在使用pymongo来查询区域中的所有项目(实际上是查询地图上某个区域中的所有场所)。之前我使用db.command(SON())来搜索球形区域,它可以返回一个字典,在字典中有一个名为results的键,其中包含场地。现在我需要在一个正方形区域内搜索,我建议使用db.places.find,但是,这会给我一个pymongo.cursor.Cursor类,我不知道如何从中提取场地结果。

有谁知道我是否应该将光标转换为字典并提取结果,或使用其他方法查询方形区域中的项目? BTW,db是pymongo.database.Database类

代码是:

>>> import pymongo
>>> db = pymongo.MongoClient(host).PSRC 
>>> resp = db.places.find({"loc": {"$within": {"$box": [[ll_lng,ll_lat], [ur_lng,ur_lat]]}}})
>>> for doc in resp:
>>>     print(doc)

我有ll_lng,ll_lat,ur_lng和ur_lat的值,使用这些值,但它不会从此代码打印

6 个答案:

答案 0 :(得分:46)

find方法返回Cursor实例,允许您迭代所有匹配的文档。

要获取符合给定条件的第一个文档,您需要使用find_onefind_one的结果是字典。

您始终可以使用list构造函数返回集合中所有文档的列表,但请记住,这会将所有数据加载到内存中,可能不是您想要的。

如果您需要重复使用游标并且有充分理由不使用rewind()

,则应该这样做

使用find进行演示:

>>> import pymongo
>>> conn = pymongo.MongoClient()
>>> db = conn.test #test is my database
>>> col = db.spam #Here spam is my collection
>>> cur = col.find()  
>>> cur
<pymongo.cursor.Cursor object at 0xb6d447ec>
>>> for doc in cur:
...     print(doc)  # or do something with the document
... 
{'a': 1, '_id': ObjectId('54ff30faadd8f30feb90268f'), 'b': 2}
{'a': 1, 'c': 3, '_id': ObjectId('54ff32a2add8f30feb902690'), 'b': 2}

使用find_one进行演示:

>>> col.find_one()
{'a': 1, '_id': ObjectId('54ff30faadd8f30feb90268f'), 'b': 2}

答案 1 :(得分:25)

import pymongo
conn = pymongo.MongoClient()
db = conn.test #test is my database
col = db.spam #Here spam is my collection
array = list(col.find())

print array

你去了

答案 2 :(得分:6)

我建议创建一个列表并在其中附加字典。

x   = []
cur = db.dbname.find()
for i in cur:
    x.append(i)
print(x)

现在x是一个字典列表,你可以用通常的python方式操作它。

答案 3 :(得分:1)

MongoDB find方法不返回单个结果,而是返回Cursor形式的结果列表。后者是一个迭代器,因此您可以使用for循环来完成它。

对于您的情况,只需使用findOne方法而不是find。这将返回单个文档作为字典。

答案 4 :(得分:0)

地图功能是转换大集合的快速方法

from time import time


cursor = db.collection.find()

def f(x):
    return x['name']

t1 = time()
blackset = set(map(f, cursor))
print(time() - t1)

答案 5 :(得分:-1)

<强> to_dict() 将SON文档转换为普通的Python字典实例。

这比dict(...)更棘手,因为它需要递归。

http://api.mongodb.org/python/current/api/bson/son.html