是否可以使Mongo PHP扩展抛出异常,如PDO';s PDO::ERRMODE_例外?

是否可以使Mongo PHP扩展抛出异常,如PDO';s PDO::ERRMODE_例外?,php,mongodb,Php,Mongodb,我更喜欢我的程序过早失败,如果我忽略了错误检查的话,我会努力失败。不幸的是,Mongo扩展需要我不断地检查MongoDb->lastError()。有没有一种简单的方法可以用Mongo模拟数组(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXEPTION) 最好是不涉及为所有内容编写包装器类的内容,我只希望在绝对必要的情况下这样做。不,这目前是不可能的。请为此在提交功能请求 Mongo扩展需要我不断检查MongoDb->lastError() 所以这里实际发生的事情有点微妙

我更喜欢我的程序过早失败,如果我忽略了错误检查的话,我会努力失败。不幸的是,Mongo扩展需要我不断地检查
MongoDb->lastError()
。有没有一种简单的方法可以用Mongo模拟
数组(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXEPTION)


最好是不涉及为所有内容编写包装器类的内容,我只希望在绝对必要的情况下这样做。

不,这目前是不可能的。请为此在提交功能请求

Mongo扩展需要我不断检查
MongoDb->lastError()

所以这里实际发生的事情有点微妙

默认情况下,MongoDB以“触发并忘记”模式运行。因此,它向服务器发送一个写操作(fire),然后简单地相信服务器会处理它(忘记)。这是所有驱动程序的所有写入的默认配置

您需要异常,因此需要在“安全”模式下发布更新。在安全模式下,驱动程序会自动发出
lastError()
命令,然后再将控制权返回给调用方

您可以在各个操作上设置安全模式:

$collection->insert(array("x" => 1), array("safe" => true));
驱动程序应该支持在连接级别上设置此选项,但由于某些原因,不支持。因此,您必须在所有位置添加
数组('safe'=>true)

最好是不需要为所有东西编写包装器类的东西

不幸的是,我认为这是不可避免的。“安全”模式只是一个开始。在“安全”模式下,只保证向主服务器上的内存提交。如果要确保数据在磁盘上,需要使用“fsync”或“journal”。如果您正在运行副本集,并且希望确保数据位于两个位置,则需要使用一些“w”选项

此外,如果您使用的是副本集(10gen建议所有生产部署都使用副本集),则在主服务器停机时,您必须处理异常。通常,您希望重试连接,因为打开新连接应强制与新主连接建立新连接


这一点,再加上大量的其他调整,通常意味着您的代码将需要某种类型的包装类,因为您需要处理各种异常情况。

我添加了一个问题。谢谢,德里奇没有看到它弹出。你有链接吗?