 <p>Create new iterator</p> <pre><code> bson_iterator nInterat[1]; </code></pre> <p>below subit iterator</p> <pre><code>bson_iterator subit[1]; bson_iterator nInterat[1]; </code></pre> <p>instead of this </p> <pre><code>bson_iterator_subobject_init(subit, sub_Object,1) </code></pre> <p>change like </p> <pre><code>bson_iterator_subobject_init(nInterat, sub_Object,1) if(bson_find(nInterat, sub_Object, "name")) printf("\tName : %s\n", bson_iterator_string(nInterat)); if(bson_find(nInterat, sub_Object, "telephone")) printf("\tTelephone: %s\n", bson_iterator_string(nInterat)); </code></pre> <p>because your subit iterator is overwrite with current sub_object Index </p>