1

これがPymongoのクエリです

import mong #just my library for initializing
collection_1 = mong.init(collect="col_1")
collection_2 = mong.init(collect="col_2")

for name in collection_2.find({"field1":{"$exists":0}}):
    try:
            to_query = name['something']
            actual_id = collection_1.find_one({"something":to_query})['_id']
            crap_id = name['_id']
            collection_2.update({"_id":id},{"$set":{"new_name":actual_id}},upset=True)
    except:
            open('couldn_find_id.txt','a').write(name)

これは、1 つのコレクションからフィールドを取得し、そのフィールドの ID を見つけて、別のコレクションの ID を更新するだけです。約 1000 ~ 5000 回の繰り返しで機能しますが、定期的に失敗するため、スクリプトを再起動する必要があります。

 > Traceback (most recent call last):
 File "my_query.py", line 6, in <module>
 for name in collection_2.find({"field1":{"$exists":0}}):
 File "/home/user/python_mods/pymongo/pymongo/cursor.py", line 814, in next
   if len(self.__data) or self._refresh():
 File "/home/user/python_mods/pymongo/pymongo/cursor.py", line 776, in _refresh
   limit, self.__id))
 File "/home/user/python_mods/pymongo/pymongo/cursor.py", line 720, in __send_message
self.__uuid_subtype)
 File "/home/user/python_mods/pymongo/pymongo/helpers.py", line 98, in _unpack_response
cursor_id)
 pymongo.errors.OperationFailure: cursor id '7578200897189065658' not valid at server
 ^C
 bye

この失敗が何であるか、また、この失敗でもスクリプトを続行するためにそれを例外に変える方法を知っている人はいますか?

ありがとう

4

1 に答える 1