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

gla*_*313 51 python dictionary mongodb pymongo mongodb-query

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

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

sty*_*ane 55

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

要获得与您需要使用的给定条件匹配的第一个文档find_one.结果find_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}
Run Code Online (Sandbox Code Playgroud)

演示使用find_one:

>>> col.find_one()
{'a': 1, '_id': ObjectId('54ff30faadd8f30feb90268f'), 'b': 2}
Run Code Online (Sandbox Code Playgroud)

  • +1 *您始终可以使用列表构造函数...* 这是一个救命稻草。没有文件提到任何关于这... (9认同)

Ami*_*ini 34

简单

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
Run Code Online (Sandbox Code Playgroud)

你去吧


Sar*_*ian 8

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

x   = []
cur = db.dbname.find()
for i in cur:
    x.append(i)
print(x)
Run Code Online (Sandbox Code Playgroud)

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

  • 难道不能将其缩短为[db.dbname.find()中x的x]吗? (2认同)