web-dev-qa-db-ja.com

pymongo.cursor.Cursorを辞書に変換する方法は?

Pymongoを使用して、リージョン内のすべてのアイテムを照会しています(実際には、マップ上のリージョン内のすべての会場を照会することです)。前にdb.command(SON())を使用して球状領域を検索しました。これは辞書を返すことができ、辞書には会場を含むresultsというキーがあります。今、正方形のエリアを検索する必要があり、db.places.findを使用することをお勧めしますが、これはpymongo.cursor.Cursorクラスを返し、そこから会場の結果を抽出する方法がわかりません。

カーソルを辞書に変換して結果を抽出するか、別の方法を使用して正方形の領域のアイテムを照会する必要があるかどうかを知っていますか?ところで、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の値があり、これらの値を使用しますが、このコードからは何も出力されません

44
gladys0313

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}

find_oneを使用したデモ:

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

かんたん

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

そこに行く

30
Aminah Nuraini

リストを作成して辞書を追加することをお勧めします。

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

Xは辞書のリストです。通常のpythonの方法で同じものを操作できます。

MongoDB findメソッドは単一の結果を返しませんが、Cursorの形式の結果のリストを返します。後者はイテレータなので、forループで処理できます。

あなたの場合、findOneの代わりにfindメソッドを使用してください。これにより、単一のドキュメントが辞書として返されます。

1
Alexandre