如何使用C ++驱动程序在MongoDB中使用UserException处理数据类型错误

时间:2012-12-10 17:21:55

标签: c++ mongodb

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如果元素不是所需的类型。”

我的代码:

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

我做错了什么?我想自己捕获并处理数据类型异常。

谢谢!

1 个答案:

答案 0 :(得分:1)

通过查看文档和标题,我的感觉是此时文档不准确,或者使用了一些禁用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;
}

查看实际抛出的异常(如果有的话)。