我无法对远程mongodb数据库执行任何写入操作。我能够连接并进行查找(例如,查找)。我是这样连接的:
conn = pymongo.MongoClient(db_uri,slaveOK=True)
db = conn.test_database
coll = db.test_collection但是当我试着插入的时候,
coll.insert({'a':1})我遇到一个错误:
---------------------------------------------------------------------------
AutoReconnect Traceback (most recent call last)
<ipython-input-56-d4ffb9e3fa79> in <module>()
----> 1 coll.insert({'a':1})
/usr/lib/python2.7/dist-packages/pymongo/collection.pyc in insert(self, doc_or_docs, manipulate, safe, check_keys, continue_on_error, **kwargs)
410 message._do_batched_insert(self.__full_name, gen(), check_keys,
411 safe, options, continue_on_error,
--> 412 self.uuid_subtype, client)
413
414 if return_one:
/usr/lib/python2.7/dist-packages/pymongo/mongo_client.pyc in _send_message(self, message, with_last_error, command, check_primary)
1126 except (ConnectionFailure, socket.error), e:
1127 self.disconnect()
-> 1128 raise AutoReconnect(str(e))
1129 except:
1130 sock_info.close()
AutoReconnect: not master如果我删除了slaveOK=True (将其设置为默认值False),那么我仍然可以连接,但读取(和写入)失败:
AutoReconnect Traceback (most recent call last)
<ipython-input-70-6671eea24f80> in <module>()
----> 1 coll.find_one()
/usr/lib/python2.7/dist-packages/pymongo/collection.pyc in find_one(self, spec_or_id, *args, **kwargs)
719 *args, **kwargs).max_time_ms(max_time_ms)
720
--> 721 for result in cursor.limit(-1):
722 return result
723 return None
/usr/lib/python2.7/dist-packages/pymongo/cursor.pyc in next(self)
1036 raise StopIteration
1037 db = self.__collection.database
-> 1038 if len(self.__data) or self._refresh():
1039 if self.__manipulate:
1040 return db._fix_outgoing(self.__data.popleft(),
/usr/lib/python2.7/dist-packages/pymongo/cursor.pyc in _refresh(self)
980 self.__skip, ntoreturn,
981 self.__query_spec(), self.__fields,
--> 982 self.__uuid_subtype))
983 if not self.__id:
984 self.__killed = True
/usr/lib/python2.7/dist-packages/pymongo/cursor.pyc in __send_message(self, message)
923 self.__tz_aware,
924 self.__uuid_subtype,
--> 925 self.__compile_re)
926 except CursorNotFound:
927 self.__killed = True
/usr/lib/python2.7/dist-packages/pymongo/helpers.pyc in _unpack_response(response, cursor_id, as_class, tz_aware, uuid_subtype, compile_re)
99 error_object = bson.BSON(response[20:]).decode()
100 if error_object["$err"].startswith("not master"):
--> 101 raise AutoReconnect(error_object["$err"])
102 elif error_object.get("code") == 50:
103 raise ExecutionTimeout(error_object.get("$err"),
AutoReconnect: not master and slaveOk=false我连接不正确吗?有没有办法指定连接到主复制副本?
发布于 2014-09-17 09:30:06
AutoReconnect: not master表示您的操作失败,因为您试图在其上发出命令的节点不是副本集的主节点,而命令(例如,写操作)要求该节点是主节点。设置slaveOK=True只允许您从辅助节点读取,而在默认情况下,您只能从主节点读取。
如果使用replicaSet=<replica set name>将副本集名称提供给构造函数,则MongoClient能够自动发现并连接到主节点。请参阅PyMongo docs中的"Connecting to a Replica Set“。
顺便说一句,被ReadPreference取代的slaveOK被弃用了。如果要以主节点以外的节点为目标,则可以在创建客户端或发出查询时指定ReadPreference。
发布于 2020-09-13 15:26:21
我不知道它是否与这个话题相关,但当我搜索下面的异常时,谷歌会把我引向这个问题。也许这会有帮助。
pymongo.errors.NotMasterError: not master在我的例子中,我的硬盘是满的。
您也可以使用df -h命令来解决这个问题
https://stackoverflow.com/questions/25861174
复制相似问题