c - Iterating over bson array of subobjects -


i wanna iterate on drmdata values in bson object:

var loadedbson = {     // fields     drmdata : [         [0.1,3.1415],         [0.2,3.1417],         [0.3,3.1418],         [0.4,3.1419]     ] } 

here code 2 versions:

bson *loadedbson = ejdbloadbson(coll, &_oid);  bson_iterator it; bson_type bt;  bt = bson_find(&it, loadedbson, "drm_data"); if (bt != bson_array)     error();  bson_iterator it_sub; bson_iterator_subiterator(&it, &it_sub);  // go inside "loadedbson.drmdata"  while (bson_iterator_more(&it_sub)) {     bt = bson_iterator_next(&it_sub);     if (bt != bson_object)         continue;      bson_iterator it_sub_2;     bson_iterator_subiterator(&it_sub, &it_sub_2);      // version 1 started - not work     bt = bson_find(&it_sub_2, loadedbson, "val_i");     if (bt != bson_int)                           // gdb: bt == bson_eoo - bad          continue;     int val_i = bson_iterator_int(&it_sub_2);      bt = bson_find(&it_sub_2, loadedbson, "val_t");     if (bt != bson_int)         continue;     int val_t = bson_iterator_int(&it_sub_2);      printf("%d %d\n", val_i, val_t);     // version 1 ended       // version 2 started - works     bt = bson_iterator_next(&it_sub_2);     if (bt != bson_int)                          // gdb: bt == bson_int -         continue;     int val_i = bson_iterator_int(&it_sub_2);      bt = bson_iterator_next(&it_sub_2);     if (bt != bson_int)         continue;     int val_t = bson_iterator_int(&it_sub_2);      printf("%d %d\n", val_i, val_t);     // version 2 ended }     

i looking through gdb, , see when use bt = bson_find(&it_sub_2, loadedbson, "val_i"); not work , return bson_eoo, so, when simple moving iterator next bt = bson_iterator_next(&it_sub_2); - works.

why first version not works?


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -