如何使用C++驱动程序重新连接到MongoDB?

问题描述:

我有一个C++函数,它使用C++驱动程序将文档保存到MongoDB。它需要连接引用作为参数:如何使用C++驱动程序重新连接到MongoDB?

http://pastebin.com/jwRDhNWQ

当我重新启动MongoDB中,我可以看到,新的连接正在取得进展。 但是,conn.isFailed()保持为真。

这可能发生由于这样的事实,当我重新连接,我使用conn,而不是&conn 当我使用&conn&conn.connect("localhost");,我得到错误MESSAGE-

error: lvalue required as unary ‘&’ operand 

我该如何解决这个问题?即修改底层连接,以便conn.isFailed()在建立新连接时变为false?

+0

你的问题与使用'&'操作符或没有关系。如果您尝试使用'&',那么它只会尝试获取'connect'方法的返回值的地址。相反,请检查您是否正确断开/重新连接? – 2012-01-10 08:21:05

+0

是的,我可以看到在MongoDB日志中重新连接成功 – user837208 2012-01-10 08:40:53

您应该在mongo :: DBClientConnection :: DBClientConnection构造函数中启用_autoReconnect。
http://api.mongodb.org/cplusplus/current/classmongo_1_1_d_b_client_connection.html#a6a1a348024dd302572504b7bfb6e74a2

直到_check连接被调用时,方法返回的变量_failed isfailed()才会被设置。在将某些内容发送到数据库之前不会调用_checkConnection,因此,在调用_isFailed之前,可以调用ping命令。但是,建议的修复方法是启用_autoReconnect。

+0

谢谢!我将继续在构造函数中启用_autoReconnect – user837208 2012-01-10 21:34:33