0

次のコードを見てください。

collection = db_name.get_db().collection_name
print collection
# prints .. Collection(Database(Connection('localhost', 27017), u'db_name'), u'colelction_name')


for key in some_dict.keys():
        query = {"p_id":key}
        document = collection.find(query)
        print document
        # gives <pymongo.cursor.Cursor object at 0x7f13f3049b10>

ここで、このドキュメントを取得して、データを取得します。しかし、私がそうする場合:

       for d in document:
            print d

次のエラーが発生します

    File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 703, in next
   if len(self.__data) or self._refresh():
 File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 666, in _refresh
self.__uuid_subtype))
  File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 628, in __send_message
self.__tz_aware)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 101, in _unpack_response
error_object["$err"])

私は何が間違っているのですか?ありがとう

4

3 に答える 3

1

「このドキュメント」を取得したい-次に、条件に一致する1つのドキュメントをフェッチするための公式メソッドを使用します。find_one():

http://api.mongodb.org/python/2.2/api/pymongo/collection.html

基本的なAPIドキュメントを読むことはあなたの友達です。

于 2012-05-02T04:10:05.330 に答える
1

また、pymongo には、cursor で使用できるいくつかのコンストラクター オプションがあることに注意してください。

https://github.com/mongodb/mongo-python-driver/blob/master/pymongo/cursor.py

これらのオプションの一部 (await_data、exhaust など) は、カーソルの反復処理を高速化するという点で大きな違いをもたらします。

クエリの長​​さと複雑さに応じて、別のスレッドでデータを処理することもできます。これにより、カーソルをできるだけ速く処理し、途中で非同期タスクを起動できます。

mongo カーソルを使い果たすために 1 つのスレッドを実行し、そこからデータを処理するための別のスレッドを使用すると、カーソルがもたらすデータの量に関係なく、カーソルのスループットが大幅に向上することがわかりました。

于 2012-09-14T21:55:04.427 に答える
0

APIとmongoがこれに適したクエリを提供するのに、なぜこのアプローチを使用してドキュメントのバッチを取得しようとしているのかわかりませんか?

some_dict.keys()がIDのリストを返し、それらのIDに一致するドキュメントを取得したい場合は、適切な「in」クエリを使用してみませんか?

docs = collection.find({'p_id': {'$in':some_dict.keys()}})
print docs
# <pymongo.cursor.Cursor object at 0x10112dfd0>
print [d for d in docs]
# [{DOC1}, {DOC2}, {...}]

@ichが推奨するように、pymongo apiドキュメントは、mongodbクエリ言語を読むだけでなく、すべてを説明しています。

これがあなたが探していたものではない場合、あなたの意図はあなたの質問で明確ではありませんでした。IDのリストに一致するドキュメントのバッチを取得したいように見えます

于 2012-05-02T04:23:34.797 に答える