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
Post a Comment