1. ホーム
  2. python

[解決済み] pymongo.cursor.Cursorをdictに変換するには?

2023-06-08 06:53:15

質問

pymongoを使って、ある地域のすべてのアイテムを検索しています(実際には、ある地域のすべての会場を地図上で検索しています)。私は db.command(SON()) というキーがあり、そのキーに対応した辞書を返します。 results というキーがあり、そこに会場が含まれています。今、私は正方形の領域で検索する必要があり、私は使用することをお勧めします。 db.places.find を使用するよう提案されましたが、これは私に pymongo.cursor.Cursor クラスが返され、そこから会場の結果を抽出する方法がわかりません。

カーソルをdictに変換して結果を取り出すべきか、それとも四角い領域のアイテムを照会する別の方法を使用すべきか、誰か知っていますか? ちなみに、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}