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の値があり、これらの値を使用しますが、このコードからは何も出力されません
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}
かんたん
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
そこに行く
リストを作成して辞書を追加することをお勧めします。
x = []
cur = db.dbname.find()
for i in cur:
x.append(i)
print(x)
Xは辞書のリストです。通常のpythonの方法で同じものを操作できます。
MongoDB find
メソッドは単一の結果を返しませんが、Cursor
の形式の結果のリストを返します。後者はイテレータなので、for
ループで処理できます。
あなたの場合、findOne
の代わりにfind
メソッドを使用してください。これにより、単一のドキュメントが辞書として返されます。