0

Windows 7 64 SP1 MongoDB 2.2.0 C++ 驱动程序 MSVS 2010

根据:

http://api.mongodb.org/cplusplus/2.2.0/classmongo_1_1_b_s_o_n_element.html#a692f3eecb505eae2181eb938b7680fbe

Double()UserException(和类似的函数)应该“如果元素不是所需的类型,则抛出 a ”。

我的代码:

BSONObj a_document = BSON("a_string"<<"A string");

try
{
    a_document["a_string"].Double();
}
catch(mongo::UserException ue)
{
    cout << ue.toString() << endl;
}

但它不会被抓住。Intead 断言:

Sun Dec 09 16:04:28 Assertion: 13111:wrong type for field (a_string) 2 != 1
Sun Dec 09 16:04:28 dev: lastError==0 won't report:wrong type for field (a_string) 2 != 1

我究竟做错了什么?我想自己捕捉和处理数据类型异常。

谢谢!

4

1 回答 1

1

通过查看 cocumentation 和标题,我的感觉是文档此时不准确,或者使用了一些选项来禁用 MongoDB 的异常。

试试下面的代码:

BSONObj a_document = BSON("a_string"<<"A string");

try
{
    a_document["a_string"].Double();
}
catch(mongo::UserException& ue)
{
    cout << "UserException: " << ue.toString() << endl;
}
catch(mongo::MsgAssertionException& ex)
{
    cout << "MsgAssertionException: " << ex.toString() << endl;
}
catch(mongo::DBException& ex)
{
    cout << "DBException: " << ex.toString() << endl;
}
catch(std::exception& ex)
{
    cout << "std::exception: " << ex.what() << endl;
}

查看实际抛出了哪个异常(如果有)。

于 2012-12-10T18:27:38.303 回答