2013-07-21 31 views
1

在我的MongoDB數據庫我有這種形式的文件:斷言:13111:錯誤類型字段3 = 4 - MongoDB的C++司機

{ "timestamp" : "2012-01-15T17:56:14.85", 
     "Event" : [ 
      { 
       "id" : "1851236846", 
       "qualifier_id" : "209" 
      }, 
      { 
       "id" : "378258775", 
       "qualifier_id" : "57", 
       "value" : "1" 
      } 
     ] 
    } 

    { "timestamp" : "2012-01-15T16:06:09.378" 

    } 

其中一些包含數組事件有些則沒有。

當我嘗試處理使用C++的MongoDB驅動器2.4中的數據:

while (cursor->more()) { 
    BSONObj bo = cursor->next(); 
    cout << "timestamp: " << bo.getStringField("timestamp") << std::endl; 

    if(bo.hasElement("Event")) { 
    cout<<"HERE"<< endl; 

    std::vector<BSONElement> be = bo.getField("Event").Array(); // ---> at this line breaks!! 

    for (unsigned int j = 0; j < be.size(); j++) { 

       BSONObj bo2 = be[j].embeddedObject(); 
       cout << "Qualifier ID: " << bo2.getStringField("qualifier_id") << std::endl; 
       cout << "Value: " << bo2.getStringField("value")<< std::endl; 

    } 
    } 

我得到這個錯誤:

timestamp: 2012-01-15T16:06:06.529 
    HERE 
    Qualifier ID: 15 
    Value: 

    Qualifier ID: 56 
    Value: Back 

    timestamp: 2012-01-15T16:06:07.560 
    HERE 
    Qualifier ID: 212 
    Value: 14.6 

    Qualifier ID: 141 
    Value: 89.2 

    Qualifier ID: 213 
    Value: 5.9 

    Qualifier ID: 56 
    Value: Back 

    Qualifier ID: 140 
    Value: 46.7 

    timestamp: 2012-01-15T16:06:09.378 
    HERE 
    Sun Jul 21 20:06:16.974 Assertion: 13111:wrong type for field (Event) 3 != 4 
    caught wrong type for field (Event) 3 != 4 

結論的條件bo.hasElement( 「事件」 )總是如此:(???)程序在這裏剎車:

std::vector<BSONElement> be = bo.getField("Event").Array(); 

當數組事件沒有成員時。

Pease help!

回答