Details
-
Question
-
Resolution: Done
-
Minor - P4
-
None
-
2.4.0
-
None
-
Ubuntu 13.04, MongoDB C++ 2.4
Description
In my MongoDB database I have documents of this form:
{ "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" |
|
|
}
|
Some of them contain the array Event some don't.
When I'm trying to process the data using the C++ MongoDB driver 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;
|
}
|
}
|
I get this error:
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
|
In conclusion the condition bo.hasElement("Event") is always true.(???) The program brakes here:
std::vector<BSONElement> be = bo.getField("Event").Array();
|
When the array Event has no members.